Merge: Rosettacode grayscale implementation
authorJean Privat <jean@pryen.org>
Mon, 11 May 2015 23:24:54 +0000 (19:24 -0400)
committerJean Privat <jean@pryen.org>
Mon, 11 May 2015 23:24:54 +0000 (19:24 -0400)
An implementation of Rosettacode's grayscale task (http://rosettacode.org/wiki/Grayscale_image) with additional features, including creating a Bitmap from scratch and manipulating its individual pixels.

Pull-Request: #1282
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

337 files changed:
VERSION
contrib/inkscape_tools/README.md
contrib/inkscape_tools/src/svg_to_png_and_nit.nit
contrib/nitiwiki/Makefile
contrib/nitiwiki/README.md
contrib/nitiwiki/src/nitiwiki.nit
contrib/nitiwiki/src/wiki_base.nit
contrib/nitiwiki/src/wiki_html.nit
contrib/nitiwiki/src/wiki_links.nit [new file with mode: 0644]
contrib/nitiwiki/tests/nitiwiki.args
contrib/nitiwiki/tests/nitiwiki_render.args [deleted file]
contrib/nitiwiki/tests/nitiwiki_status.args [deleted file]
contrib/nitiwiki/tests/res/nitiwiki_render.res [deleted file]
contrib/nitiwiki/tests/res/wiki1_nitiwiki_render.res [new file with mode: 0644]
contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res [new file with mode: 0644]
contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res [new file with mode: 0644]
contrib/nitiwiki/tests/res/wiki2_nitiwiki_status.res [moved from contrib/nitiwiki/tests/res/nitiwiki_status.res with 68% similarity]
contrib/nitiwiki/tests/wiki1_nitiwiki_render.args [new file with mode: 0644]
contrib/nitiwiki/tests/wiki1_nitiwiki_status.args [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/assets/css/main.css [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/config.ini [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/contact.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/other_page.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec1/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/config.ini [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec21/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/other.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/footer.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/header.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/menu.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/template.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2_nitiwiki_render.args [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2_nitiwiki_status.args [new file with mode: 0644]
contrib/nitrpg/README.md [new file with mode: 0644]
contrib/nitrpg/src/achievements.nit
contrib/nitrpg/src/events.nit
contrib/nitrpg/src/game.nit
contrib/nitrpg/src/listener.nit
contrib/nitrpg/src/reactors.nit
contrib/nitrpg/src/statistics.nit
contrib/nitrpg/src/templates/panels.nit
contrib/nitrpg/src/web.nit
contrib/refund/.gitignore [new file with mode: 0644]
contrib/refund/Makefile [new file with mode: 0644]
contrib/refund/src/refund.nit [new file with mode: 0644]
contrib/refund/src/refund_base.nit [new file with mode: 0644]
contrib/refund/src/refund_json.nit [new file with mode: 0644]
contrib/refund/tests/Makefile [new file with mode: 0644]
contrib/refund/tests/client_error1.json [new file with mode: 0644]
contrib/refund/tests/client_error2.json [new file with mode: 0644]
contrib/refund/tests/client_error3.json [new file with mode: 0644]
contrib/refund/tests/client_error4.json [new file with mode: 0644]
contrib/refund/tests/contractA1.json [new file with mode: 0644]
contrib/refund/tests/contractA2.json [new file with mode: 0644]
contrib/refund/tests/contractA3.json [new file with mode: 0644]
contrib/refund/tests/contractA4.json [new file with mode: 0644]
contrib/refund/tests/contractA5.json [new file with mode: 0644]
contrib/refund/tests/contractB1.json [new file with mode: 0644]
contrib/refund/tests/contractB2.json [new file with mode: 0644]
contrib/refund/tests/contractB3.json [new file with mode: 0644]
contrib/refund/tests/contractB4.json [new file with mode: 0644]
contrib/refund/tests/contractB5.json [new file with mode: 0644]
contrib/refund/tests/contractC1.json [new file with mode: 0644]
contrib/refund/tests/contractC2.json [new file with mode: 0644]
contrib/refund/tests/contractC3.json [new file with mode: 0644]
contrib/refund/tests/contractD1.json [new file with mode: 0644]
contrib/refund/tests/contractD2.json [new file with mode: 0644]
contrib/refund/tests/contractD3.json [new file with mode: 0644]
contrib/refund/tests/contractD4.json [new file with mode: 0644]
contrib/refund/tests/contractE1.json [new file with mode: 0644]
contrib/refund/tests/contractE2.json [new file with mode: 0644]
contrib/refund/tests/contractE3.json [new file with mode: 0644]
contrib/refund/tests/contractE4.json [new file with mode: 0644]
contrib/refund/tests/contract_error1.json [new file with mode: 0644]
contrib/refund/tests/contract_error2.json [new file with mode: 0644]
contrib/refund/tests/contract_error3.json [new file with mode: 0644]
contrib/refund/tests/contract_error4.json [new file with mode: 0644]
contrib/refund/tests/dossier_error1.json [new file with mode: 0644]
contrib/refund/tests/json_error1.json [new file with mode: 0644]
contrib/refund/tests/json_error2.json [new file with mode: 0644]
contrib/refund/tests/json_error3.json [new file with mode: 0644]
contrib/refund/tests/month_error1.json [new file with mode: 0644]
contrib/refund/tests/month_error2.json [new file with mode: 0644]
contrib/refund/tests/month_error3.json [new file with mode: 0644]
contrib/refund/tests/month_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error3.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_error3.json [new file with mode: 0644]
contrib/refund/tests/recl_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error3.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_soin_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_soin_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_soin_error3.json [new file with mode: 0644]
contrib/refund/tests/res/client_error1.res [new file with mode: 0644]
contrib/refund/tests/res/client_error2.res [new file with mode: 0644]
contrib/refund/tests/res/client_error3.res [new file with mode: 0644]
contrib/refund/tests/res/client_error4.res [new file with mode: 0644]
contrib/refund/tests/res/contractA1.res [new file with mode: 0644]
contrib/refund/tests/res/contractA2.res [new file with mode: 0644]
contrib/refund/tests/res/contractA3.res [new file with mode: 0644]
contrib/refund/tests/res/contractA4.res [new file with mode: 0644]
contrib/refund/tests/res/contractA5.res [new file with mode: 0644]
contrib/refund/tests/res/contractB1.res [new file with mode: 0644]
contrib/refund/tests/res/contractB2.res [new file with mode: 0644]
contrib/refund/tests/res/contractB3.res [new file with mode: 0644]
contrib/refund/tests/res/contractB4.res [new file with mode: 0644]
contrib/refund/tests/res/contractB5.res [new file with mode: 0644]
contrib/refund/tests/res/contractC1.res [new file with mode: 0644]
contrib/refund/tests/res/contractC2.res [new file with mode: 0644]
contrib/refund/tests/res/contractC3.res [new file with mode: 0644]
contrib/refund/tests/res/contractD1.res [new file with mode: 0644]
contrib/refund/tests/res/contractD2.res [new file with mode: 0644]
contrib/refund/tests/res/contractD3.res [new file with mode: 0644]
contrib/refund/tests/res/contractD4.res [new file with mode: 0644]
contrib/refund/tests/res/contractE1.res [new file with mode: 0644]
contrib/refund/tests/res/contractE2.res [new file with mode: 0644]
contrib/refund/tests/res/contractE3.res [new file with mode: 0644]
contrib/refund/tests/res/contractE4.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error1.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error2.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error3.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error4.res [new file with mode: 0644]
contrib/refund/tests/res/dossier_error1.res [new file with mode: 0644]
contrib/refund/tests/res/json_error1.res [new file with mode: 0644]
contrib/refund/tests/res/json_error2.res [new file with mode: 0644]
contrib/refund/tests/res/json_error3.res [new file with mode: 0644]
contrib/refund/tests/res/month_error1.res [new file with mode: 0644]
contrib/refund/tests/res/month_error2.res [new file with mode: 0644]
contrib/refund/tests/res/month_error3.res [new file with mode: 0644]
contrib/refund/tests/res/month_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error3.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error3.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error3.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_soin_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_soin_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_soin_error3.res [new file with mode: 0644]
contrib/refund/tests/tests.sh [new file with mode: 0755]
examples/calculator/Makefile
examples/calculator/src/calculator_gtk.nit
examples/langannot.nit [new file with mode: 0644]
examples/languages/en/LC_MESSAGES/langannot.po [new file with mode: 0644]
examples/languages/fr/LC_MESSAGES/langannot.po [new file with mode: 0644]
examples/languages/ja/LC_MESSAGES/langannot.po [new file with mode: 0644]
examples/languages/langannot.pot [new file with mode: 0644]
examples/mnit_simple/src/test_intent.nit
examples/rosettacode/balanced_brackets.nit [new file with mode: 0644]
lib/android/android.nit
lib/android/data_store.nit [moved from lib/android/android_data_store.nit with 97% similarity]
lib/android/intent/intent_api10.nit
lib/android/shared_preferences/shared_preferences_api10.nit
lib/android/toast.nit
lib/android/ui/native_ui.nit [moved from lib/android/ui.nit with 61% similarity]
lib/android/ui/ui.nit [new file with mode: 0644]
lib/android/vibration.nit
lib/bucketed_game.nit
lib/c.nit
lib/counter.nit
lib/gettext.nit [new file with mode: 0644]
lib/github/api.nit
lib/gtk/v3_4/gdk_enums.nit
lib/gtk/v3_4/gtk_assistant.nit
lib/gtk/v3_4/gtk_core.nit
lib/gtk/v3_4/gtk_dialogs.nit
lib/gtk/v3_4/gtk_widgets_ext.nit
lib/gtk/v3_4/v3_4.nit
lib/gtk/v3_6.nit
lib/gtk/v3_8.nit
lib/java/java.nit
lib/json/static.nit
lib/linux/data_store.nit [moved from lib/linux/linux_data_store.nit with 97% similarity]
lib/linux/linux.nit
lib/markdown/markdown.nit
lib/mnit/mnit_injected_input.nit
lib/mnit/opengles1.nit
lib/mnit_android/android_assets.nit
lib/mnit_linux/linux_opengles1.nit
lib/mongodb/mongodb.nit [new file with mode: 0644]
lib/mongodb/native_mongodb.nit [new file with mode: 0644]
lib/pthreads/README.md
lib/pthreads/examples/threaded_example.nit
lib/pthreads/pthreads.nit
lib/standard/collection/abstract_collection.nit
lib/standard/collection/sorter.nit
lib/standard/environ.nit
lib/standard/math.nit
lib/standard/stream.nit
lib/standard/string.nit
misc/vim/plugin/nit.vim
misc/vim/syntax/nit.vim
share/man/nitpretty.md
share/nitdoc/vendors/bootstrap/css/bootstrap.min.css
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.eot
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.svg
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.ttf
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2 [new file with mode: 0644]
share/nitdoc/vendors/bootstrap/js/bootstrap.min.js
src/astbuilder.nit
src/c_tools.nit
src/compiler/abstract_compiler.nit
src/compiler/compiler_ffi/compiler_ffi.nit [moved from src/compiler/compiler_ffi.nit with 63% similarity]
src/compiler/compiler_ffi/light.nit [new file with mode: 0644]
src/compiler/compiler_ffi/light_only.nit [new file with mode: 0644]
src/compiler/separate_compiler.nit
src/doc/doc_phases/doc_graphs.nit
src/doc/doc_phases/doc_html.nit
src/doc/doc_phases/doc_indexing.nit
src/doc/doc_phases/doc_lin.nit [new file with mode: 0644]
src/doc/doc_phases/doc_structure.nit
src/doc/html_templates/html_components.nit
src/doc/html_templates/html_model.nit
src/doc/html_templates/html_templates.nit
src/ffi/c.nit
src/ffi/extern_classes.nit
src/ffi/ffi.nit
src/ffi/ffi_base.nit
src/ffi/java.nit
src/ffi/light_c.nit [new file with mode: 0644]
src/ffi/light_ffi.nit [new file with mode: 0644]
src/ffi/light_ffi_base.nit [new file with mode: 0644]
src/frontend/frontend.nit
src/frontend/i18n_phase.nit [new file with mode: 0644]
src/frontend/parallelization_phase.nit
src/frontend/simple_misc_analysis.nit
src/interpreter/naive_interpreter.nit
src/metrics/mendel_metrics.nit
src/metrics/metrics_base.nit
src/model/model.nit
src/modelbuilder.nit
src/modelize/modelize_class.nit
src/modelize/modelize_property.nit
src/nitdoc.nit
src/nith.nit
src/nitni/nitni_base.nit
src/nitpretty.nit
src/parser/lexer.nit
src/parser/nit.sablecc3xx
src/parser/parser.nit
src/parser/parser_abs.nit
src/parser/parser_nodes.nit
src/parser/parser_prod.nit
src/parser/tables_nit.c
src/platform/android.nit
src/pretty.nit
src/semantize/typing.nit
src/transform.nit
tests/base_arg_named.nit [new file with mode: 0644]
tests/base_arg_named_inherit.nit [new file with mode: 0644]
tests/base_arg_order.nit [new file with mode: 0644]
tests/base_attr_abstract2.nit [new file with mode: 0644]
tests/base_operators.nit [moved from tests/test_operators.nit with 75% similarity]
tests/base_primitive_recv.nit [new file with mode: 0644]
tests/error_syntax2.nit
tests/exec.skip
tests/sav/balanced_brackets.res [new file with mode: 0644]
tests/sav/base_arg_named.res [new file with mode: 0644]
tests/sav/base_arg_named_alt1.res [new file with mode: 0644]
tests/sav/base_arg_named_inherit.res [new file with mode: 0644]
tests/sav/base_arg_named_inherit_alt1.res [new file with mode: 0644]
tests/sav/base_arg_named_inherit_alt2.res [new file with mode: 0644]
tests/sav/base_arg_order.res [new file with mode: 0644]
tests/sav/base_attr_abstract2.res [new file with mode: 0644]
tests/sav/base_formal_subtype.res
tests/sav/base_gen2_alt1.res
tests/sav/base_gen2_alt3.res
tests/sav/base_gen2_alt5.res
tests/sav/base_isa_gen1.res
tests/sav/base_isa_gen2.res
tests/sav/base_isa_gen4.res
tests/sav/base_isa_gen5.res
tests/sav/base_isa_gen8.res
tests/sav/base_isa_nullable1.res
tests/sav/base_isa_nullable2.res
tests/sav/base_isa_vt_gen1.res
tests/sav/base_operators.res [new file with mode: 0644]
tests/sav/base_primitive_recv.res [new file with mode: 0644]
tests/sav/base_vararg3_alt1.res
tests/sav/base_vararg3_alt3.res
tests/sav/error_formal.res
tests/sav/error_needed_method_alt2.res
tests/sav/error_operators.res
tests/sav/error_redef_1alt2_alt1.res
tests/sav/error_redef_1alt2_alt4.res
tests/sav/error_redef_1alt4_alt1.res
tests/sav/error_redef_1alt4_alt4.res
tests/sav/error_syntax2.res
tests/sav/error_type_unk_alt2.res
tests/sav/error_virtual_type2.res
tests/sav/error_virtual_type2_alt1.res
tests/sav/error_virtual_type2_alt2.res
tests/sav/error_virtual_type2_alt3.res
tests/sav/error_virtual_type2_alt4.res
tests/sav/error_virtual_type2_alt5.res
tests/sav/error_virtual_type2_alt6.res
tests/sav/error_virtual_type_alt3.res
tests/sav/nitg-e/base_isa_gen1.res
tests/sav/nitg-e/base_isa_gen4.res
tests/sav/nitg-e/base_isa_gen5.res
tests/sav/nitg-e/base_isa_nullable1.res
tests/sav/nitg-e/base_isa_nullable2.res
tests/sav/nitmetrics_args1.res
tests/sav/nitpretty_args21.res
tests/sav/nitunit_args6.res
tests/sav/syntax_semi.res [moved from tests/sav/test_operators.res with 55% similarity]
tests/sav/syntax_semi2.res [new file with mode: 0644]
tests/sav/syntax_semi2_alt1.res [new file with mode: 0644]
tests/sav/test_attr_easy.res
tests/sav/test_bufferedfilereader.res [new file with mode: 0644]
tests/sav/test_ffi_c_operators.res
tests/sav/test_parser_args1.res
tests/sav/test_parser_args7.res
tests/sav/threaded_example.res
tests/syntax_semi.nit [new file with mode: 0644]
tests/syntax_semi2.nit [new file with mode: 0644]
tests/test_bufferedfilereader.nit [new file with mode: 0644]
tests/test_ffi_c_operators.nit
tests/test_gtk.nit
tests/tests.sh

diff --git a/VERSION b/VERSION
index 3d105a6..520c9c2 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-v0.7.3
+v0.7.4
index 017ec86..c338656 100644 (file)
@@ -1,25 +1,28 @@
 # SVG to PNG and Nit
 
-This tool is used in combination with Inkscape to simplify assets creation for _mnit_ apps. It uses Inkscape to extract a PNG file from a SVG file. It will also create a Nit source file to create _mnit_ images for each objects with an id beginning by 0.
+This tool uses Inkscape to prepare assets for Nit applications from a single SVG file.
+It selects objects to extract from the SVG file when their id begins with `0`.
 
-# Features
+It will produce two files:
 
-* Creates a sinlge PNG file per SVG source file
-* Creates subimages for objects with an id beginning by 0.
-* If the id ends with 0 to 9, will instead create an array of subimages.
+* A Nit source file that declares a single class with an attribute for each selected object.
+  The attribute usually holds a single texture, except if the the id ends with a digit, then it will be an array.
 
-# Usage
+* A single PNG image file that contains all the selected objects.
+  With the option `--pow2`, the image size is rounded to the next of 2.
+
+## Usage
 
 1. Create a new Inkscape document.
-2. Create objects and set their ids to begin with 0
-3. Save the document (ex: to `drawing.svg`) the name of the file is important
+2. Create objects and set their ids to begin with `0`.
+3. Save the document to `drawing.svg` (for this example), the name of the file is used to name the Nit class.
 4. Execute `bin/svg_to_png_and_nit drawing.svg`
-5. From your code, import the generated source file (at  src/drawing.nit`)
+5. From your code, import the generated source file at `src/drawing.nit`.
 6. Use the class `DrawingImages` and its attributes.
 
-# Examples
+## Examples
 
-The minimal test in  tests/app/  shows the basic usage of this tool.
+The minimal test in `tests/app/` shows the basic usage of this tool.
 
 The Dino example `../../../../examples/mnit_dino` also uses this tool and is a more complete and practical example.
 
index b24cbf5..f9e690b 100644 (file)
@@ -1,6 +1,6 @@
 # This file is part of NIT ( http://www.nitlanguage.org ).
 #
-# Copyright 2012-2014 Alexis Laferrière <alexis.laf@xymus.net>
+# Copyright 2012-2015 Alexis Laferrière <alexis.laf@xymus.net>
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# This script extracts pngs from a single svg for all objects with ids
-# beginning by 0. Requires Inkscape.
+# Extract images of objects from an SVG file using Inkscape
 module svg_to_png_and_nit
 
 import opts
 import template
 
+# Image information extracted from the SVG file
 class Image
+       # Name extracted from the object ID minus the `0` prefix and Nit safe
        var name: String
+
+       # Left border
        var x: Int
+
+       # Top border
        var y: Int
+
+       # Image width
        var w: Int
+
+       # Image height
        var h: Int
+
+       # Right border
        fun right: Int do return x+w
+
+       # Bottom border
        fun bottom: Int do return y+h
 
        redef fun to_s do return name
 end
 
-# The Nit source file to retreive all images
-class ImageSetSrc
+# Document being processed, concerns both the source and the target
+class Document
+       # Name of the source file
+       var drawing_name: String
+
+       # Name of the class to generate
+       var nit_class_name: String = drawing_name.capitalized + "Images" is lazy
+
+       # Scaling to apply to the exported image
+       var scale: Float
+
+       # Source minimum X
+       var min_x: Int
+
+       # Source maximum X
+       var max_x: Int
+
+       # Source minimum Y
+       var min_y: Int
+
+       # Source maximum Y
+       var max_y: Int
+
+       # Get the coordinates for `image` as `"x, y, w, h"`
+       fun coordinates(image: Image): String
+       do
+               var x = image.x.adapt(min_x, scale)
+               var y = image.y.adapt(min_y, scale)
+               var w = (image.w.to_f*scale).to_i
+               var h = (image.h.to_f*scale).to_i
+
+               return "{x}, {y}, {w}, {h}"
+       end
+end
+
+# Nit module with a single class to retrieve to access the extracted images
+abstract class ImageSetSrc
        super Template
 
-       var name: String
-       init(name: String) do self.name = name
+       # Target document
+       var document: Document
 
-       var attributes = new Array[String]
-       var load_exprs = new Array[String]
+       # Images found in the source document
+       var images: Array[Image]
+end
+
+# Nit module targeting the MNit framework
+class MnitImageSetSrc
+       super ImageSetSrc
 
        redef fun rendering
        do
+               # Known array of images
+               var arrays_of_images = new Array[String]
+
+               # Attributes of the generated class
+               var attributes = new Array[String]
+
+               # Statements for the generated `load_all` method
+               var load_exprs = new Array[String]
+
+               # Add images to Nit source file
+               for image in images do
+                       # Adapt coordinates to new top left and scale
+                       var coordinates = document.coordinates(image)
+
+                       var nit_name = image.name
+                       var last_char = nit_name.chars.last
+                       if last_char.to_s.is_numeric then
+                               # Array of images
+                               # TODO support more than 10 images in an array
+
+                               nit_name = nit_name.substring(0, nit_name.length-1)
+                               if not arrays_of_images.has(nit_name) then
+                                       # Create class attribute to store Array
+                                       arrays_of_images.add(nit_name)
+                                       attributes.add "\tvar {nit_name} = new Array[Image]\n"
+                               end
+                               load_exprs.add "\t\t{nit_name}.add(main_image.subimage({coordinates}))\n"
+                       else
+                               # Single image
+                               attributes.add "\tvar {nit_name}: Image is noinit\n"
+                               load_exprs.add "\t\t{nit_name} = main_image.subimage({coordinates})\n"
+                       end
+               end
+
                add """
-# file generated by svg_to_png, do not modify, redef instead
+# File generated by svg_to_png_and_nit, do not modify, redef instead
 
 import mnit::image_set
 
-class {{{name}}}
+class {{{document.nit_class_name}}}
        super ImageSet
 
+       private var main_image: Image is noinit
 """
                add_all attributes
                add """
 
        redef fun load_all(app: App)
        do
+               main_image = app.load_image(\"images/{{{document.drawing_name}}}.png\")
 """
                add_all load_exprs
                add """
@@ -68,13 +157,94 @@ end
        end
 end
 
+# Nit module targeting the Gamnit framework
+#
+# Gamnit's `Texture` already manage the lazy loading, no need to do it here.
+class GamnitImageSetSrc
+       super ImageSetSrc
+
+       private fun attributes: Array[String]
+       do
+               # Separate the images from the arrays of images
+               var single_images = new Array[Image]
+               var arrays_of_images = new HashMap[String, Array[Image]]
+
+               for image in images do
+                       var nit_name = image.name
+                       var last_char = nit_name.chars.last
+                       if last_char.to_s.is_numeric then
+
+                               # Is an array
+                               nit_name = nit_name.substring(0, nit_name.length-1)
+                               if not arrays_of_images.keys.has(nit_name) then
+                                       # Create a new array
+                                       var array = new Array[Image]
+                                       arrays_of_images[nit_name] = array
+                               end
+
+                               arrays_of_images[nit_name].add image
+                       else
+                               # Is a single image
+                               single_images.add image
+                       end
+               end
+
+               # Attributes of the class
+               var attributes = new Array[String]
+               attributes.add "\tprivate var main_image = new Texture(\"images/{document.drawing_name}.png\")\n"
+
+               # Add single images to Nit source file
+               for image in single_images do
+                       # Adapt coordinates to new top left and scale
+                       var coordinates = document.coordinates(image)
+
+                       attributes.add "\tvar {image.name}: Texture = main_image.subtexture({coordinates})\n"
+               end
+
+               # Add array of images too
+               for name, images in arrays_of_images do
+
+                       var lines = new Array[String]
+                       for image in images do
+                               var coordinates = document.coordinates(image)
+                               lines.add "\t\tmain_image.subtexture({coordinates})"
+                       end
+
+                       attributes.add """
+       var {{{name}}} = new Array[Texture].with_items(
+{{{lines.join(",\n")}}})
+"""
+               end
+
+               return attributes
+       end
+
+       redef fun rendering
+       do
+               add """
+# File generated by svg_to_png_and_nit, do not modify, redef instead
+
+import gamnit::display
+
+class {{{document.nit_class_name}}}
+
+"""
+               add_all attributes
+               add """
+end
+"""
+       end
+end
+
 redef class Int
-       fun adapt(d: Int, scale: Float): Int
+       # Magic adaption of this coordinates to the given `margin` and `scale`
+       fun adapt(margin: Int, scale: Float): Int
        do
-               var corrected = self-d
+               var corrected = self-margin
                return (corrected.to_f*scale).to_i
        end
 
+       # The first power of to equal or greater than `self`
        fun next_pow2: Int
        do
                var p = 2
@@ -83,13 +253,15 @@ redef class Int
        end
 end
 
-var opt_out_src = new OptionString("Path to output source file", "--src", "-s")
+var opt_out_src = new OptionString("Path to output source file (folder or file)", "--src", "-s")
 var opt_assets = new OptionString("Path to assert dir where to put PNG files", "--assets", "-a")
-var opt_scale = new OptionFloat("Apply scaling to exported images (defaut at 1.0 of 90dpi)", 1.0, "--scale", "-x")
+var opt_scale = new OptionFloat("Apply scaling to exported images (default at 1.0 of 90dpi)", 1.0, "--scale", "-x")
+var opt_gamnit = new OptionBool("Target the Gamnit framework (by default it targets Mnit)", "--gamnit", "-g")
+var opt_pow2 = new OptionBool("Round the image size to the next power of 2", "--pow2")
 var opt_help = new OptionBool("Print this help message", "--help", "-h")
 
 var opt_context = new OptionContext
-opt_context.add_option(opt_out_src, opt_assets, opt_scale, opt_help)
+opt_context.add_option(opt_out_src, opt_assets, opt_scale, opt_gamnit, opt_pow2, opt_help)
 
 opt_context.parse(args)
 var rest = opt_context.rest
@@ -125,15 +297,13 @@ end
 
 var src_path = opt_out_src.value
 if src_path == null then src_path = "src"
-if not src_path.file_exists then
+if not src_path.file_exists and src_path.file_extension != "nit" then
        stderr.write "Source dir '{src_path}' does not exist (use --src)\n"
        exit 1
 end
 
 var scale = opt_scale.value
 
-var arrays_of_images = new Array[String]
-
 for drawing in drawings do
        var drawing_name = drawing.basename(".svg")
 
@@ -177,7 +347,7 @@ for drawing in drawings do
        while not proc.eof do
                var line = proc.read_line
                var words = line.split(",")
-               
+
                if words.length == 5 then
                        var id = words[0]
 
@@ -202,54 +372,37 @@ for drawing in drawings do
        end
        proc.close
 
-       # Nit class
-       var nit_class_name = drawing_name.chars.first.to_s.to_upper + drawing_name.substring_from(1) + "Images"
-       var nit_src = new ImageSetSrc(nit_class_name)
-       nit_src.attributes.add "\tprivate var main_image: Image is noinit\n"
-       nit_src.load_exprs.add "\t\tmain_image = app.load_image(\"images/{drawing_name}.png\")\n"
 
        # Sort images by name, it prevents Array errors and looks better
        alpha_comparator.sort(images)
 
-       # Add images to Nit source file
-       for image in images do
-               # Adapt coordinates to new top left and scale
-               var x = image.x.adapt(min_x, scale)
-               var y = image.y.adapt(min_y, scale)
-               var w = (image.w.to_f*scale).to_i
-               var h = (image.h.to_f*scale).to_i
+       var document = new Document(drawing_name, scale, min_x, max_x, min_y, max_y)
 
-               var nit_name = image.name
-               var last_char = nit_name.chars.last
-               if last_char.to_s.is_numeric then
-                       # Array of images
-                       # TODO support more than 10 images in an array
-
-                       nit_name = nit_name.substring(0, nit_name.length-1)
-                       if not arrays_of_images.has(nit_name) then
-                               # Create class attribute to store Array
-                               arrays_of_images.add(nit_name)
-                               nit_src.attributes.add "\tvar {nit_name} = new Array[Image]\n"
-                       end
-                       nit_src.load_exprs.add "\t\t{nit_name}.add(main_image.subimage({x}, {y}, {w}, {h}))\n"
-               else
-                       # Single image
-                       nit_src.attributes.add "\tvar {nit_name}: Image is noinit\n"
-                       nit_src.load_exprs.add "\t\t{nit_name} = main_image.subimage({x}, {y}, {w}, {h})\n"
-               end
+       # Nit class
+       var nit_src: ImageSetSrc
+       if opt_gamnit.value then
+               nit_src = new GamnitImageSetSrc(document, images)
+       else
+               nit_src = new MnitImageSetSrc(document, images)
+       end
+
+       if not src_path.file_extension == "nit" then
+               src_path = src_path/drawing_name+".nit"
        end
 
        # Output source file
-       var src_file = new FileWriter.open("{src_path}/{drawing_name}.nit")
+       var src_file = new FileWriter.open(src_path)
        nit_src.write_to(src_file)
        src_file.close
 
-       # Find closest power of 2
-       var dx = max_x - min_x
-       max_x = dx.next_pow2 + min_x
+       # Find next power of 2
+       if opt_pow2.value then
+               var dx = max_x - min_x
+               max_x = dx.next_pow2 + min_x
 
-       var dy = max_y - min_y
-       max_y = dy.next_pow2 + min_y
+               var dy = max_y - min_y
+               max_y = dy.next_pow2 + min_y
+       end
 
        # Inkscape's --export-area inverts the Y axis. It uses the lower left corner of
        # the drawing area where as queries return coordinates from the top left.
index 2bff3fc..b2b3fed 100644 (file)
@@ -4,8 +4,7 @@ nitiwiki:
        mkdir -p bin
        ../../bin/nitc src/nitiwiki.nit -o bin/nitiwiki
 
-check: tests
-tests: nitiwiki
+check: nitiwiki
        cd tests; make
 
 doc:
index abe84ad..1c764d4 100644 (file)
@@ -128,6 +128,55 @@ For more details on each option see `WikiConfig`.
 
 To add content in your wiki simply add markdown files (with `.md` extension) into the `pages/` folder.
 
+#### Write content
+
+Nitiwiki only support content written in
+[markdown format](http://daringfireball.net/projects/markdown/).
+
+#### Link wiki articles
+
+In nitiwiki, linking to a section or an article is done using the *wikilinks*.
+
+Wikilinks provide easy linking between pages of the wiki.
+To create a wikilink, just put the name of the page to link to in double brackets.
+For example `[[WikiLink]]`.
+
+If you ever need to write something like `[[WikiLink]]` without creating a wikilink,
+just prefix it with a `\\`, like `\\[[WikiLink]]`.
+
+There are some special linking precedence that come into play when linking between
+sections and sub-sections.
+
+Nitiwiki will chose the first entry that match the given wikilinks in that order:
+1. Looks in the current section
+2. Looks in the current section children recursively
+3. Looks in the current section parents until root
+
+To link to or from a subpage, you can use a regular wikilink that does not
+contain the name of the parent directory of the subpage.
+Nikiwiki descends the directory hierarchy looking for a page that matches your link.
+
+For example, if `FooBar/SubPage` links to `OtherPage`, nikiwiki will first prefer
+pointing the link to `FooBar/SubPage/OtherPage` if it exists, next to
+`FooBar/OtherPage` and finally to `OtherPage` in the root of the wiki.
+
+You can also specify a link that contains a relative section name,
+like `FooBar/OtherPage` to specify what page to link to.
+
+You can also use `/` at the start of a link, to specify exactly which page to link to,
+when there are multiple pages with similar names and the link goes to the wrong page by default.
+For example, linking from `FooBar/SubPage` to `/OtherPage` will link to the `OtherPage`
+in the root of the wiki, even if there is a `FooBar/OtherPage`.
+
+It's also possible to write a wikilink that uses something other than the page
+name as the link text.
+For example `[[Contact|Contact me!]]` links to the `Contact` page, but the link
+will appear like this: `Contact me!`.
+
+You can link to an anchor inside a page, using something like `[[WikiLink#foo]]`.
+
+#### Render the wiki in HTML
+
 Once you have done your changes, use:
 
        nitiwiki --status
index 200f971..803da02 100644 (file)
@@ -157,7 +157,11 @@ if opt_rsync.value then
 end
 
 # --status
-if opt_status.value or args.is_empty then
+if opt_status.value or
+       (not opt_clean.value and
+        not opt_fetch.value and
+        not opt_render.value and
+        not opt_rsync.value) then
        wiki.parse
        wiki.status
 end
index 1527d4c..56cbbcb 100644 (file)
@@ -16,7 +16,6 @@
 module wiki_base
 
 import template::macro
-import markdown
 import opts
 import ini
 
@@ -72,6 +71,9 @@ class Nitiwiki
                end
        end
 
+       # Render output.
+       fun render do end
+
        # Show wiki status.
        fun status do
                print "nitiWiki"
@@ -105,7 +107,7 @@ class Nitiwiki
                end
        end
 
-       # Display msg if `level >= verbose_level`
+       # Display msg if `level <= verbose_level`
        fun message(msg: String, level: Int) do
                if level <= verbose_level then print msg
        end
@@ -163,6 +165,7 @@ class Nitiwiki
        # `path` is used to determine the ancestor sections.
        protected fun new_article(path: String): WikiArticle do
                if entries.has_key(path) then return entries[path].as(WikiArticle)
+               message("Found article `{path}`", 2)
                var article = new WikiArticle.from_source(self, path)
                var section = new_section(path.dirname)
                section.add_child(article)
@@ -447,7 +450,7 @@ class WikiSection
        private fun try_load_config do
                var cfile = wiki.expand_path(wiki.config.root_dir, src_path, wiki.config_filename)
                if not cfile.file_exists then return
-               wiki.message("Custom config for section {name}", 2)
+               wiki.message("Custom config for section {name}", 1)
                config = new SectionConfig(cfile)
        end
 
@@ -512,18 +515,13 @@ class WikiArticle
        # Page content.
        #
        # What you want to be displayed in the page.
-       var content: nullable Writable = null
-
-       # Headlines ids and titles.
-       var headlines = new ArrayMap[String, HeadLine]
+       var content: nullable Writable = null is writable
 
-       # Create a new articleu sing a markdown source file.
+       # Create a new article using a markdown source file.
        init from_source(wiki: Nitiwiki, md_file: String) do
                src_full_path = md_file
                init(wiki, md_file.basename(".md"))
-               var md_proc = new MarkdownProcessor
-               content = md_proc.process(md)
-               headlines = md_proc.emitter.decorator.headlines
+               content = md
        end
 
        redef var src_full_path: nullable String = null
@@ -538,8 +536,8 @@ class WikiArticle
        # Extract the markdown text from `source_file`.
        #
        # REQUIRE: `has_source`.
-       var md: String is lazy do
-               assert has_source
+       var md: nullable String is lazy do
+               if not has_source then return null
                var file = new FileReader.open(src_full_path.to_s)
                var md = file.read_all
                file.close
index 3427016..461e9e5 100644 (file)
 # HTML wiki rendering
 module wiki_html
 
-import wiki_base
+import wiki_links
 
 redef class Nitiwiki
 
        # Render HTML output looking for changes in the markdown sources.
-       fun render do
+       redef fun render do
+               super
                if not root_section.is_dirty and not force_render then return
                var out_dir = expand_path(config.root_dir, config.out_dir)
                out_dir.mkdir
@@ -47,10 +48,6 @@ redef class Nitiwiki
 end
 
 redef class WikiEntry
-
-       # Url to `self` once generated.
-       fun url: String do return wiki.config.root_url.join_path(breadcrumbs.join("/"))
-
        # Get a `<a>` template link to `self`
        fun tpl_link: Writable do
                return "<a href=\"{url}\">{title}</a>"
@@ -103,17 +100,6 @@ redef class WikiSection
                end
        end
 
-       # The index page for this section.
-       #
-       # If no file `index.md` exists for this section,
-       # a summary is generated using contained articles.
-       var index: WikiArticle is lazy do
-               for child in children.values do
-                       if child isa WikiArticle and child.is_index then return child
-               end
-               return new WikiSectionIndex(wiki, "index", self)
-       end
-
        redef fun tpl_link do return index.tpl_link
 
        # Render the section hierarchy as a html tree.
@@ -173,26 +159,13 @@ redef class WikiArticle
                end
        end
 
-       redef fun url do
-               if parent == null then
-                       return wiki.config.root_url.join_path("{name}.html")
-               else
-                       return parent.url.join_path("{name}.html")
-               end
-       end
-
-       # Is `self` an index page?
-       #
-       # Checks if `self.name == "index"`.
-       fun is_index: Bool do return name == "index"
-
        redef fun render do
+               super
                if not is_dirty and not wiki.force_render then return
                wiki.message("Render article {name}", 2)
                var file = out_full_path
                file.dirname.mkdir
                tpl_page.write_to_file file
-               super
        end
 
 
@@ -317,15 +290,7 @@ class WikiSitemap
 end
 
 # A `WikiArticle` that contains the section index tree.
-class WikiSectionIndex
-       super WikiArticle
-
-       # The section described by `self`.
-       var section: WikiSection
-
-       redef fun title do return section.title
-
-       redef fun url do return section.url
+redef class WikiSectionIndex
 
        redef var is_dirty = false
 
diff --git a/contrib/nitiwiki/src/wiki_links.nit b/contrib/nitiwiki/src/wiki_links.nit
new file mode 100644 (file)
index 0000000..bbbfea0
--- /dev/null
@@ -0,0 +1,295 @@
+# 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.
+
+# Wiki internal links handling.
+module wiki_links
+
+import wiki_base
+intrude import markdown
+
+redef class Nitiwiki
+       # Looks up a WikiEntry by its `name`.
+       #
+       # Rules are:
+       # 1. Looks in the current section
+       # 2. Looks in the current section children
+       # 3. Looks in the current section parent
+       # 4. Looks up to wiki root
+       #
+       # Returns `null` if no article can be found.
+       fun lookup_entry_by_name(context: WikiEntry, name: String): nullable WikiEntry do
+               var section = context.parent
+               var res = section.lookup_entry_by_name(name)
+               if res != null then return res
+               while section != null do
+                       if section.name == name then return section
+                       if section.children.has_key(name) then return section.children[name]
+                       section = section.parent
+               end
+               return null
+       end
+
+       # Looks up a WikiEntry by its `title`.
+       #
+       # Rules are:
+       # 1. Looks in the current section
+       # 2. Looks in the current section children
+       # 3. Looks in the current section parent
+       # 4. Looks up to wiki root
+       #
+       # Returns `null` if no article can be found.
+       fun lookup_entry_by_title(context: WikiEntry, title: String): nullable WikiEntry do
+               var section = context.parent
+               var res = section.lookup_entry_by_title(title)
+               if res != null then return res
+               while section != null do
+                       if section.title == title then return section
+                       for child in section.children.values do
+                               if child.title == title then return child
+                       end
+                       section = section.parent
+               end
+               return null
+       end
+
+       # Looks up a WikiEntry by its `path`.
+       #
+       # Path can be relative from `context` like `context/entry`.
+       # Or absolute like `/entry1/entry2`.
+       #
+       # Returns `null` if no article can be found.
+       fun lookup_entry_by_path(context: WikiEntry, path: String): nullable WikiEntry do
+               var entry = context.parent
+               var parts = path.split_with("/")
+               if path.has_prefix("/") then
+                       entry = root_section
+                       if parts.is_empty then return root_section.index
+                       parts.shift
+               end
+               while not parts.is_empty do
+                       var name = parts.shift
+                       if name.is_empty then continue
+                       if not entry.children.has_key(name) then return null
+                       entry = entry.children[name]
+               end
+               return entry
+       end
+end
+
+redef class WikiEntry
+
+       # Url to `self` once generated.
+       fun url: String do return wiki.config.root_url.join_path(breadcrumbs.join("/"))
+
+       redef fun render do
+               super
+               if not is_dirty and not wiki.force_render then return
+       end
+
+       # Search in `self` then `self.children` if an entry has the name `name`.
+       fun lookup_entry_by_name(name: String): nullable WikiEntry do
+               if children.has_key(name) then return children[name]
+               for child in children.values do
+                       var res = child.lookup_entry_by_name(name)
+                       if res != null then return res
+               end
+               return null
+       end
+
+       # Search in `self` then `self.children` if an entry has the title `title`.
+       fun lookup_entry_by_title(title: String): nullable WikiEntry do
+               for child in children.values do
+                       if child.title == title then return child
+               end
+               for child in children.values do
+                       var res = child.lookup_entry_by_title(title)
+                       if res != null then return res
+               end
+               return null
+       end
+end
+
+redef class WikiSection
+
+       # The index page for this section.
+       #
+       # If no file `index.md` exists for this section,
+       # a summary is generated using contained articles.
+       var index: WikiArticle is lazy do
+               for child in children.values do
+                       if child isa WikiArticle and child.is_index then return child
+               end
+               return new WikiSectionIndex(wiki, "index", self)
+       end
+end
+
+redef class WikiArticle
+
+       # Headlines ids and titles.
+       var headlines = new ArrayMap[String, HeadLine]
+
+       # Is `self` an index page?
+       #
+       # Checks if `self.name == "index"`.
+       fun is_index: Bool do return name == "index"
+
+       redef fun url do
+               if parent == null then
+                       return wiki.config.root_url.join_path("{name}.html")
+               else
+                       return parent.url.join_path("{name}.html")
+               end
+       end
+
+       redef fun render do
+               super
+               if not is_dirty and not wiki.force_render or not has_source then return
+               var md_proc = new NitiwikiMdProcessor(wiki, self)
+               content = md_proc.process(md.as(not null))
+               headlines.recover_with(md_proc.emitter.decorator.headlines)
+       end
+end
+
+# A `WikiArticle` that contains the section index tree.
+class WikiSectionIndex
+       super WikiArticle
+
+       # The section described by `self`.
+       var section: WikiSection
+
+       redef fun title do return section.title
+
+       redef fun url do return section.url
+end
+
+# A MarkdownProcessor able to parse wiki links.
+class NitiwikiMdProcessor
+       super MarkdownProcessor
+
+       # Wiki used to resolve links.
+       var wiki: Nitiwiki
+
+       # Article parsed by `self`.
+       #
+       # Used to contextualize links.
+       var context: WikiArticle
+
+       init do
+               emitter = new MarkdownEmitter(self)
+               emitter.decorator = new NitiwikiDecorator(wiki, context)
+       end
+
+       redef fun token_at(text, pos) do
+               var token = super
+               if not token isa TokenLink then return token
+               if pos + 1 < text.length then
+                       var c = text[pos + 1]
+                       if c == '[' then return new TokenWikiLink(pos, c)
+               end
+               return token
+       end
+end
+
+private class NitiwikiDecorator
+       super HTMLDecorator
+
+       # Wiki used to resolve links.
+       var wiki: Nitiwiki
+
+       # Article used to contextualize links.
+       var context: WikiArticle
+
+       fun add_wikilink(v: MarkdownEmitter, link: Text, name, comment: nullable Text) do
+               var wiki = v.processor.as(NitiwikiMdProcessor).wiki
+               var target: nullable WikiEntry = null
+               var anchor: nullable String = null
+               if link.has("#") then
+                       var parts = link.split_with("#")
+                       link = parts.first
+                       anchor = parts.subarray(1, parts.length - 1).join("#")
+               end
+               if link.has("/") then
+                       target = wiki.lookup_entry_by_path(context, link.to_s)
+               else
+                       target = wiki.lookup_entry_by_name(context, link.to_s)
+                       if target == null then
+                               target = wiki.lookup_entry_by_title(context, link.to_s)
+                       end
+               end
+               v.add "<a "
+               if target != null then
+                       if name == null then name = target.title
+                       link = target.url
+               else
+                       wiki.message("Warning: unknown wikilink `{link}` (in {context.src_path.as(not null)})", 0)
+                       v.add "class=\"broken\" "
+               end
+               v.add "href=\""
+               append_value(v, link)
+               if anchor != null then append_value(v, "#{anchor}")
+               v.add "\""
+               if comment != null and not comment.is_empty then
+                       v.add " title=\""
+                       append_value(v, comment)
+                       v.add "\""
+               end
+               v.add ">"
+               if name == null then name = link
+               v.emit_text(name)
+               v.add "</a>"
+       end
+end
+
+# A NitiWiki link token.
+#
+# Something of the form `[[foo]]`.
+#
+# Allowed formats:
+#
+# * `[[Wikilink]]`
+# * `[[Wikilink/Bar]]`
+# * `[[Wikilink#foo]]`
+# * `[[Wikilink/Bar#foo]]`
+# * `[[title|Wikilink]]`
+# * `[[title|Wikilink/Bar]]`
+# * `[[title|Wikilink/Bar#foo]]`
+class TokenWikiLink
+       super TokenLink
+
+       redef fun emit_hyper(v) do
+               v.decorator.as(NitiwikiDecorator).add_wikilink(v, link.as(not null), name, comment)
+       end
+
+       redef fun check_link(v, out, start, token) do
+               var md = v.current_text
+               var pos = start + 2
+               var tmp = new FlatBuffer
+               pos = md.read_md_link_id(tmp, pos)
+               if pos < start then return -1
+               var name = tmp.write_to_string
+               if name.has("|") then
+                       var parts = name.split_once_on("|")
+                       self.name = parts.first
+                       self.link = parts[1]
+               else
+                       self.name = null
+                       self.link = name
+               end
+               pos += 1
+               pos = md.skip_spaces(pos)
+               if pos < start then return -1
+               pos += 1
+               return pos
+       end
+end
diff --git a/contrib/nitiwiki/tests/nitiwiki_render.args b/contrib/nitiwiki/tests/nitiwiki_render.args
deleted file mode 100644 (file)
index 6f7050e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-nitiwiki --config wiki1/config.ini --clean --render -v
diff --git a/contrib/nitiwiki/tests/nitiwiki_status.args b/contrib/nitiwiki/tests/nitiwiki_status.args
deleted file mode 100644 (file)
index aa96d13..0000000
+++ /dev/null
@@ -1 +0,0 @@
-nitiwiki --config wiki1/config.ini --clean --status
diff --git a/contrib/nitiwiki/tests/res/nitiwiki_render.res b/contrib/nitiwiki/tests/res/nitiwiki_render.res
deleted file mode 100644 (file)
index 25f17ab..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Render section out
-Render section out/sec1
-Render section out/sec2
-Render auto-index for section out/sec2
-Render section out/sec2/sub-sec21
-Render section out/sec2/sub-sec22
diff --git a/contrib/nitiwiki/tests/res/wiki1_nitiwiki_render.res b/contrib/nitiwiki/tests/res/wiki1_nitiwiki_render.res
new file mode 100644 (file)
index 0000000..adf25a7
--- /dev/null
@@ -0,0 +1 @@
+Render section out
diff --git a/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res b/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res
new file mode 100644 (file)
index 0000000..936a764
--- /dev/null
@@ -0,0 +1,10 @@
+nitiWiki
+name: wiki1
+config: wiki1/config.ini
+url: http://localhost/
+
+There is modified files:
+ + pages
+ + /pages/index.md
+
+Use nitiwiki --render to render modified files
diff --git a/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res b/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res
new file mode 100644 (file)
index 0000000..46cf17c
--- /dev/null
@@ -0,0 +1,20 @@
+Custom config for section sec2
+Render section out
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Warning: unknown wikilink `Not Found` (in /pages/index.md)
+Warning: unknown wikilink `/not/found` (in /pages/index.md)
+Warning: unknown wikilink `not/found` (in /pages/index.md)
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Render section out/sec1
+Render section out/sec2
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `Not Found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `/not/found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not/found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Render section out/sec2/sub-sec21
+Render section out/sec2/sub-sec22
@@ -1,17 +1,21 @@
 nitiWiki
-name: wiki1
-config: wiki1/config.ini
+name: wiki2
+config: wiki2/config.ini
 url: http://localhost/
 
 There is modified files:
  + pages
+ + /pages/contact.md
  + /pages/index.md
+ + /pages/other_page.md
  + pages/sec1
  + /pages/sec1/index.md
  + pages/sec2
+ + /pages/sec2/index.md
  + pages/sec2/sub-sec21
  + /pages/sec2/sub-sec21/index.md
  + pages/sec2/sub-sec22
  + /pages/sec2/sub-sec22/index.md
+ + /pages/sec2/sub-sec22/other.md
 
 Use nitiwiki --render to render modified files
diff --git a/contrib/nitiwiki/tests/wiki1_nitiwiki_render.args b/contrib/nitiwiki/tests/wiki1_nitiwiki_render.args
new file mode 100644 (file)
index 0000000..a7633a0
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki1/config.ini --clean --render -v
diff --git a/contrib/nitiwiki/tests/wiki1_nitiwiki_status.args b/contrib/nitiwiki/tests/wiki1_nitiwiki_status.args
new file mode 100644 (file)
index 0000000..d4b6826
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki1/config.ini --clean --status
diff --git a/contrib/nitiwiki/tests/wiki2/assets/css/main.css b/contrib/nitiwiki/tests/wiki2/assets/css/main.css
new file mode 100644 (file)
index 0000000..b3c3af5
--- /dev/null
@@ -0,0 +1,3 @@
+dummy { margin: 0 }
+
+a.broken { font-style: italic; color: red }
diff --git a/contrib/nitiwiki/tests/wiki2/config.ini b/contrib/nitiwiki/tests/wiki2/config.ini
new file mode 100644 (file)
index 0000000..ba285d6
--- /dev/null
@@ -0,0 +1,2 @@
+wiki.name=wiki2
+wiki.root_dir=wiki2
diff --git a/contrib/nitiwiki/tests/wiki2/pages/contact.md b/contrib/nitiwiki/tests/wiki2/pages/contact.md
new file mode 100644 (file)
index 0000000..09f7129
--- /dev/null
@@ -0,0 +1 @@
+# Contact
diff --git a/contrib/nitiwiki/tests/wiki2/pages/index.md b/contrib/nitiwiki/tests/wiki2/pages/index.md
new file mode 100644 (file)
index 0000000..9ad0a4d
--- /dev/null
@@ -0,0 +1,63 @@
+# Test wikilinks
+
+## Link to entries by name
+
+* Link to [[sec1]]
+* Link to [[sec2]]
+* Link to [[contact]]
+* Link to [[other_page]]
+* Link to [[other]]
+* Link to [[not found]]
+
+## Link to entries by title
+
+* Link to [[Sec1]]
+* Link to [[Section 2]]
+* Link to [[Contact]]
+* Link to [[Other Page]]
+* Link to [[Other]]
+* Link to [[Not Found]]
+
+## Link to entries by absolute path
+
+* Link to [[/index]]
+* Link to [[/sec1]]
+* Link to [[/sec1/index]]
+* Link to [[/sec1/]]
+* Link to [[/sec2/sub-sec22]]
+* Link to [[/sec2/sub-sec22/]]
+* Link to [[/sec2/sub-sec22/index]]
+* Link to [[/sec2/sub-sec22/other]]
+* Link to [[/not/found]]
+
+## Link to entries by relative path
+
+* Link to [[sec1]]
+* Link to [[sec1/index]]
+* Link to [[sec1/]]
+* Link to [[sec2/sub-sec22]]
+* Link to [[sec2/sub-sec22/]]
+* Link to [[sec2/sub-sec22/index]]
+* Link to [[sec2/sub-sec22/other]]
+* Link to [[not/found]]
+
+## Link with custom text
+
+* Link to [[1Fooi|Other Page]]
+* Link to [[2 Foo bar|/sec2/sub-sec22/index]]
+* Link to [[3|sec2/sub-sec22/other]]
+* Link to [[foo>bar>bar|other_page]]
+* Link to [[5|not found]]
+
+## Link with anchors
+
+* Link to [[Other Page#Foo]]
+* Link to [[/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[sec2/sub-sec22/other#3]]
+* Link to [[other_page#4]]
+* Link to [[not found#5_lol]]
+* Link to [[1|Other Page#Foo]]
+* Link to [[2|/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[3|sec2/sub-sec22/other#3]]
+* Link to [[4|other_page#4foobar#baz]]
+* Link to [[5|not found#5]]
diff --git a/contrib/nitiwiki/tests/wiki2/pages/other_page.md b/contrib/nitiwiki/tests/wiki2/pages/other_page.md
new file mode 100644 (file)
index 0000000..a1ca7d9
--- /dev/null
@@ -0,0 +1 @@
+# Other Page
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec1/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec1/index.md
new file mode 100644 (file)
index 0000000..7c2fd43
--- /dev/null
@@ -0,0 +1 @@
+# Section 1
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/config.ini b/contrib/nitiwiki/tests/wiki2/pages/sec2/config.ini
new file mode 100644 (file)
index 0000000..dcde4cc
--- /dev/null
@@ -0,0 +1 @@
+section.title=Section 2
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/index.md
new file mode 100644 (file)
index 0000000..c81eb7d
--- /dev/null
@@ -0,0 +1,58 @@
+# Test wikilinks
+
+## Link to entries by name
+
+* Link to [[sec1]]
+* Link to [[sec2]]
+* Link to [[contact]]
+* Link to [[other_page]]
+* Link to [[not found]]
+
+## Link to entries by title
+
+* Link to [[Sec1]]
+* Link to [[Section 2]]
+* Link to [[Contact]]
+* Link to [[Other Page]]
+* Link to [[Not Found]]
+
+## Link to entries by absolute path
+
+* Link to [[/index]]
+* Link to [[/sec1]]
+* Link to [[/sec1/index]]
+* Link to [[/sec1/]]
+* Link to [[/sec2/sub-sec22]]
+* Link to [[/sec2/sub-sec22/]]
+* Link to [[/sec2/sub-sec22/index]]
+* Link to [[/sec2/sub-sec22/other]]
+* Link to [[/not/found]]
+
+## Link to entries by relative path
+
+* Link to [[sub-sec22]]
+* Link to [[sub-sec22/index]]
+* Link to [[sub-sec22/other]]
+* Link to [[sub-sec22/]]
+* Link to [[not/found]]
+
+## Link with custom text
+
+* Link to [[1Foo|Other Page]]
+* Link to [[2 Foo bar|/sec2/sub-sec22/index]]
+* Link to [[3|sub-sec22/other]]
+* Link to [[4foo>bar>baz|other_page]]
+* Link to [[5|not found]]
+
+## Link with anchors
+
+* Link to [[Other Page#Foo]]
+* Link to [[/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[sub-sec22/other#3]]
+* Link to [[other_page#4]]
+* Link to [[not found#5_lol]]
+* Link to [[1|Other Page#Foo]]
+* Link to [[2|/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[3|sub-sec22/other#3]]
+* Link to [[4|other_page#4foobar#baz]]
+* Link to [[5|not found#5]]
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec21/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec21/index.md
new file mode 100644 (file)
index 0000000..4c40d90
--- /dev/null
@@ -0,0 +1 @@
+# Section 2-1
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/index.md
new file mode 100644 (file)
index 0000000..03e06f2
--- /dev/null
@@ -0,0 +1 @@
+# Section 2-2
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/other.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/other.md
new file mode 100644 (file)
index 0000000..10a1342
--- /dev/null
@@ -0,0 +1 @@
+# Other page
diff --git a/contrib/nitiwiki/tests/wiki2/templates/footer.html b/contrib/nitiwiki/tests/wiki2/templates/footer.html
new file mode 100644 (file)
index 0000000..7506b39
--- /dev/null
@@ -0,0 +1,10 @@
+<div class="row footer">
+       <div class="container-fluid">
+               <div class="well well-sm">
+                       <p><strong>%TITLE% &copy; %YEAR%</strong></p>
+                       <p class="text-muted"><em>last modification %GEN_TIME%</em></p>
+                       <p class="text-muted">Proudly powered by
+                               <a href="http://nitlanguage.org">nit</a>!</p>
+               </div>
+       </div>
+</div>
diff --git a/contrib/nitiwiki/tests/wiki2/templates/header.html b/contrib/nitiwiki/tests/wiki2/templates/header.html
new file mode 100644 (file)
index 0000000..1cb06bf
--- /dev/null
@@ -0,0 +1,9 @@
+<div class="container-fluid header">
+       <div class="container">
+               <div class="header">
+                       <a href="http://uqam.ca"><img src="%ROOT_URL%/%LOGO%" alt="logo" /></a>
+                       <h2>%SUBTITLE%</h2>
+                       <h1>%TITLE%</h1>
+               </div>
+       </div>
+</div>
diff --git a/contrib/nitiwiki/tests/wiki2/templates/menu.html b/contrib/nitiwiki/tests/wiki2/templates/menu.html
new file mode 100644 (file)
index 0000000..1ff832e
--- /dev/null
@@ -0,0 +1,20 @@
+<nav class="menu" role="navigation">
+       <div class="container">
+               <!-- Brand and toggle get grouped for better mobile display -->
+               <div class="navbar-header">
+                       <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                               <span class="sr-only">Toggle navigation</span>
+                               <span class="icon-bar"></span>
+                               <span class="icon-bar"></span>
+                               <span class="icon-bar"></span>
+                       </button>
+                       <a class="navbar-brand" href="%ROOT_URL%index.html">%TITLE%</a>
+               </div>
+               <!-- Collect the nav links, forms, and other content for toggling -->
+               <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+                       <ul class="nav navbar-nav">
+                       %MENUS%
+                       </ul>
+               </div><!-- /.navbar-collapse -->
+       </div>
+</nav>
diff --git a/contrib/nitiwiki/tests/wiki2/templates/template.html b/contrib/nitiwiki/tests/wiki2/templates/template.html
new file mode 100644 (file)
index 0000000..6b3b126
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+       <head>
+               <meta charset="utf-8">
+               <meta http-equiv="X-UA-Compatible" content="IE=edge">
+               <meta name="viewport" content="width=device-width, initial-scale=1">
+               <title>%TITLE%</title>
+
+               <link href="%ROOT_URL%/assets/vendors/bootstrap/bootstrap-3.2.0-dist/css/bootstrap.min.css" rel="stylesheet">
+               <link href="%ROOT_URL%/assets/css/main.css" rel="stylesheet">
+
+               <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+               <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+               <!--[if lt IE 9]>
+               <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+               <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+               <![endif]-->
+       </head>
+       <body>
+               %HEADER%
+               %TOP_MENU%
+               <div class="container">
+                       <div class="row">
+                               %BODY%
+                       </div>
+                       %FOOTER%
+               </div>
+
+               <script src="%ROOT_URL%/vendors/jquery/jquery-1.11.1.min.js"></script>
+               <script src="%ROOT_URL%/vendors/bootstrap/bootstrap-3.2.0-dist/js/bootstrap.min.js"></script>
+       </body>
+</html>
diff --git a/contrib/nitiwiki/tests/wiki2_nitiwiki_render.args b/contrib/nitiwiki/tests/wiki2_nitiwiki_render.args
new file mode 100644 (file)
index 0000000..d4d6ee6
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki2/config.ini --clean --render -v
diff --git a/contrib/nitiwiki/tests/wiki2_nitiwiki_status.args b/contrib/nitiwiki/tests/wiki2_nitiwiki_status.args
new file mode 100644 (file)
index 0000000..d2da70b
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki2/config.ini --clean --status
diff --git a/contrib/nitrpg/README.md b/contrib/nitrpg/README.md
new file mode 100644 (file)
index 0000000..c91c77e
--- /dev/null
@@ -0,0 +1,84 @@
+# Welcome to NitRPG!
+
+NitRPG is a Role Playing Game that takes place on [GitHub](https://github.com/).
+
+In NitRPG, GitHub users are represented by players that battle on repo for
+nitcoins and glory.
+
+## Features
+
+* Auto-update with GitHub hooks
+* Display repo statistics
+* Display players statsitics
+* Repo actions are rewarded by nitcoins
+* Players can unlock achievements
+
+## How to install
+
+From the `nit` root:
+
+~~~bash
+> cd contrib/nitrpg
+> make
+~~~
+
+### Configuring the GitHub hook
+
+NitRPG needs you to add a new GitHub hook on your repo to keep the game
+`listener` up-to-date automatically.
+
+Hook configuration:
+
+* **Payload URL**: URL and port to the listener (ex: `http://yourdomain.com:8080`)
+* **Content type**: `application/json`
+* **Wich events**: `Send me everything`
+
+Be sure to set the hook as `Active` in the GitHub admin panel.
+
+### Starting the listener
+
+The `listener` program is used to listen to GitHub hooks and update game data.
+It should alwaysd be up if you want your game to be kept up-to-date.
+
+To run the listener:
+
+       ./listener <host> <port>
+
+The arguments `host` and `port` must correspond to what you entered in your
+GitHub hook settings.
+
+### Starting the web server
+
+The `web` program act as a [nitcorn](http://nitlanguage.org/doc/stdlib/module_nitcorn__nitcorn.html) webserver that display the game results live.
+
+To run the webserver:
+
+       ./web <host> <port> <root>
+
+The arguments `host` and `port` must correspond to what you entered in your
+GitHub hook settings.
+The `root` argument is used to specify the path from the domain url to the
+NitRPG root.
+
+For example, if NitRPG is installed in `yourdomain.com/nitrpg`:
+
+       ./web localhost 3000 "/nitrpg"
+
+Leave it empty if NitRPG is installed at the root of the domain:
+
+       ./web localhost 3000 ""
+
+The webserver can then be accessed at `http://yourdomain.com:3000/nitrpg/`.
+
+## RoadMap
+
+NitRPG stills under heavy development.
+Incomming features contain (but are not limited to):
+
+* Periodized stats (weekly, monthly, yearly, overall)
+* Display graphs with stats
+* More achievements
+* Shop: exchange Nitcoins against glorifying items
+
+You can suggest new achievements or ideas in the
+[NitRPG RoadMap Issue](https://github.com/privat/nit/issues/1161).
index 625bfc2..c799b86 100644 (file)
@@ -35,7 +35,7 @@ redef class GameEntity
                var key = self.key / achievement.key
                if game.store.has_key(key) then return
                stats.inc("achievements")
-               achievement.save_in(self)
+               achievement.save_in(self.key)
                save
        end
 
@@ -400,3 +400,119 @@ class Player10KCommits
        redef var reward = 10000
        redef var threshold = 10000
 end
+
+#####################
+### Issue Comments
+#####################
+
+# Unlock achievement after X issue comments.
+#
+# Used to factorize behavior.
+abstract class PlayerXComments
+       super AchievementReactor
+
+       # Number of comments required to unlock the achievement.
+       var threshold: Int is noinit
+
+       redef fun react_event(game, event) do
+               if not event isa IssueCommentEvent then return
+               if not event.action == "created" then return
+               var player = event.comment.user.player(game)
+               if player.stats["comments"] == threshold then
+                       var a = new_achievement(game)
+                       player.unlock_achievement(a, event)
+               end
+       end
+end
+
+# Player author his first comment in issues.
+class Player1Comment
+       super PlayerXComments
+
+       redef var id = "player_1_comment"
+       redef var name = "From lurker to member"
+       redef var desc = "Comment on an issue."
+       redef var reward = 10
+       redef var threshold = 1
+end
+
+# Player author 100 issue comments.
+class Player100Comments
+       super PlayerXComments
+
+       redef var id = "player_100_comments"
+       redef var name = "Chatter"
+       redef var desc = "Comment 100 times on issues."
+       redef var reward = 100
+       redef var threshold = 100
+end
+
+# Player author 1000 issue comments.
+class Player1KComments
+       super PlayerXComments
+
+       redef var id = "player_1000__comments"
+       redef var name = "You sir, talk a lot!"
+       redef var desc = "Comment 1000 times on issues."
+       redef var reward = 1000
+       redef var threshold = 1000
+end
+
+# Ping @privat in a comment.
+class PlayerPingGod
+       super AchievementReactor
+
+       redef var id = "player_ping_god"
+       redef var name = "Ping god"
+       redef var desc = "Ping the owner of the repo for the first time."
+       redef var reward = 50
+
+       redef fun react_event(game, event) do
+               if not event isa IssueCommentEvent then return
+               var owner = game.repo.owner.login
+               if event.comment.body.has("@{owner}".to_re) then
+                       var player = event.comment.user.player(game)
+                       var a = new_achievement(game)
+                       player.unlock_achievement(a, event)
+               end
+       end
+end
+
+# Give your first +1
+class PlayerFirstReview
+       super AchievementReactor
+
+       redef var id = "player_first_review"
+       redef var name = "First +1"
+       redef var desc = "Give a +1 for the first time."
+       redef var reward = 10
+
+       redef fun react_event(game, event) do
+               if not event isa IssueCommentEvent then return
+               # FIXME use a more precise way to locate reviews
+               if event.comment.is_ack then
+                       var player = event.comment.user.player(game)
+                       var a = new_achievement(game)
+                       player.unlock_achievement(a, event)
+               end
+       end
+end
+
+# Talk about nitcoin in issue comments.
+class PlayerSaysNitcoin
+       super AchievementReactor
+
+       redef var id = "player_says_nitcoin"
+       redef var name = "Talking about money"
+       redef var desc = "Say something about nitcoins in a comment."
+       redef var reward = 10
+
+       redef fun react_event(game, event) do
+               if not event isa IssueCommentEvent then return
+               if event.comment.body.has("(n|N)itcoin".to_re) then
+                       var player = event.comment.user.player(game)
+                       var a = new_achievement(game)
+                       player.unlock_achievement(a, event)
+               end
+       end
+end
index 227469a..dde2c55 100644 (file)
@@ -25,7 +25,7 @@ import game
 redef class GameEntity
 
        # Saves `event` in `self`.
-       fun add_event(event: GameEvent) do event.save_in(self)
+       fun add_event(event: GameEvent) do event.save_in(self.key)
 
        # List all events registered in this entity.
        #
index 4d62283..1ab143e 100644 (file)
@@ -43,11 +43,11 @@ interface GameEntity
        # Date are stored under `self.key`.
        fun save do game.store.store_object(key, to_json)
 
-       # Saves `self` state into `target` key data.
+       # Saves `self` state under `key` data.
        #
-       # Data are stored under `target.key / self.key`.
-       fun save_in(target: GameEntity) do
-               game.store.store_object(target.key / key, to_json)
+       # Data are stored under `key / self.key`.
+       fun save_in(key: String) do
+               game.store.store_object(key / self.key, to_json)
        end
 
        # Json representation of `self`.
@@ -292,6 +292,19 @@ end
 
 # utils
 
+# Sort games by descending number of players.
+#
+# The first in the list is the game with the more players.
+class GamePlayersComparator
+       super Comparator
+
+       redef type COMPARED: Game
+
+       redef fun compare(a, b) do
+               return b.load_players.length <=> a.load_players.length
+       end
+end
+
 # Sort players by descending number of nitcoins.
 #
 # The first in the list is the player with the more of nitcoins.
index 0e4ba00..8bee99b 100644 (file)
@@ -63,6 +63,8 @@ l.add_reactor(new Player1Issue, new Player100Issues, new Player1KIssues)
 l.add_reactor(new Player1Pull, new Player100Pulls, new Player1KPulls)
 l.add_reactor(new Player1Commit, new Player100Commits, new Player1KCommits)
 l.add_reactor(new IssueAboutNitdoc, new IssueAboutFFI)
+l.add_reactor(new Player1Comment, new Player100Comments, new Player1KComments)
+l.add_reactor(new PlayerPingGod, new PlayerFirstReview, new PlayerSaysNitcoin)
 
 print "Listening events on {host}:{port}"
 l.listen
index 79a3682..2424d86 100644 (file)
@@ -88,12 +88,9 @@ redef class IssueCommentEvent
 
        # Rewards player for review comments.
        #
-       # Actuallty we look if the comment contains the string `"+1"`.
-       #
        # TODO only give nitcoins if reviewers < 2
        redef fun react_player_event(r, game) do
-               # FIXME use a more precise way to locate reviews
-               if comment.body.has("\\+1\\b".to_re) then
+               if comment.is_ack then
                        react_player_review(r, game)
                end
        end
index dfdb3ba..b7d3530 100644 (file)
@@ -26,27 +26,17 @@ import counter
 
 redef class GameEntity
 
-       # Statistics for this entity.
-       fun stats: GameStats is abstract
-
-       # Load statistics for this `MEntity` if any.
-       fun load_statistics: nullable GameStats do
-               var key = self.key / "statistics"
-               if not game.store.has_key(key) then return null
-               var json = game.store.load_object(key)
-               return new GameStats.from_json(game, json)
-       end
+       # Statistics manager for this entity.
+       fun stats: GameStatsManager is abstract
 end
 
 redef class Game
 
-       redef var stats is lazy do
-               return load_statistics or else new GameStats(game)
-       end
+       redef var stats is lazy do return new GameStatsManager(game, self)
 
        redef fun save do
                super
-               stats.save_in(self)
+               stats.save_in(self.key)
        end
 
        redef fun pretty do
@@ -60,15 +50,16 @@ end
 
 redef class Player
 
-       redef var stats is lazy do
-               return load_statistics or else new GameStats(game)
-       end
+       redef var stats is lazy do return new GameStatsManager(game, self)
 
        redef fun save do
                super
-               stats.save_in(self)
+               stats.save_in(self.key)
        end
 
+       redef fun nitcoins do return stats["nitcoins"]
+       redef fun nitcoins=(nc) do stats["nitcoins"] = nc
+
        redef fun pretty do
                var res = new FlatBuffer
                res.append super
@@ -78,6 +69,98 @@ redef class Player
        end
 end
 
+# Store game stats for defined period.
+class GameStatsManager
+       super GameEntity
+       super Counter[String]
+
+       redef var game
+
+       # The GameEntity monitored by these statistics.
+       var owner: GameEntity
+
+       redef var key = "stats"
+
+       # Returns the `GameStats` instance for the overall statistics.
+       var overall: GameStats is lazy do
+               return load_stats_for("all")
+       end
+
+       # Returns the `GameStats` instance for the current year statistics.
+       var yearly: GameStats is lazy do
+               var date = new Tm.gmtime
+               var key = date.strftime("%Y")
+               return load_stats_for(key)
+       end
+
+       # Returns the `GameStats` instance for the current month statistics.
+       var monthly: GameStats is lazy do
+               var date = new Tm.gmtime
+               var key = date.strftime("%Y-%m")
+               return load_stats_for(key)
+       end
+
+       # Returns the `GameStats` instance for the current day statistics.
+       var daily: GameStats is lazy do
+               var date = new Tm.gmtime
+               var key = date.strftime("%Y-%m-%d")
+               return load_stats_for(key)
+       end
+
+       # Returns the `GameStats` instance for the current week statistics.
+       var weekly: GameStats is lazy do
+               var date = new Tm.gmtime
+               var key = date.strftime("%Y-W%U")
+               return load_stats_for(key)
+       end
+
+       # Load statistics for a `period` key.
+       fun load_stats_for(period: String): GameStats do
+               var key = owner.key / self.key / period
+               if not game.store.has_key(key) then
+                       return new GameStats(game, period)
+               end
+               var json = game.store.load_object(key)
+               return new GameStats.from_json(game, period, json)
+       end
+
+       redef fun [](key) do return overall[key]
+
+       redef fun []=(key, value) do
+               overall[key] = value
+               yearly[key] = value
+               monthly[key] = value
+               daily[key] = value
+               weekly[key] = value
+       end
+
+       redef fun inc(e) do
+               overall.inc(e)
+               yearly.inc(e)
+               monthly.inc(e)
+               daily.inc(e)
+               weekly.inc(e)
+       end
+
+       redef fun dec(e) do
+               overall.dec(e)
+               yearly.dec(e)
+               monthly.dec(e)
+               daily.dec(e)
+               weekly.dec(e)
+       end
+
+       redef fun save_in(key) do
+               overall.save_in(key / self.key)
+               yearly.save_in(key / self.key)
+               monthly.save_in(key / self.key)
+               daily.save_in(key / self.key)
+               weekly.save_in(key / self.key)
+       end
+
+       redef fun pretty do return overall.pretty
+end
+
 # Game statistics structure that can be saved as a `GameEntity`.
 class GameStats
        super GameEntity
@@ -85,11 +168,13 @@ class GameStats
 
        redef var game
 
-       redef var key = "statistics"
+       # The pedriod these stats are about.
+       var period: String
+
+       redef fun key do return period
 
-       # Load `self` from saved data
-       init from_json(game: Game, json: JsonObject) do
-               self.game = game
+       # Load `self` from saved data.
+       init from_json(game: Game, period: String, json: JsonObject) do
                for k, v in json do self[k] = v.as(Int)
        end
 
@@ -99,15 +184,6 @@ class GameStats
                return obj
        end
 
-       # Decrements the value of `key` statistic entry by 1.
-       fun dec(key: String) do
-               if not has_key(key) then
-                       self[key] = 0
-               else
-                       self[key] -= 1
-               end
-       end
-
        redef fun pretty do
                var res = new FlatBuffer
                for k, v in self do
@@ -187,3 +263,22 @@ redef class PullRequestEvent
                end
        end
 end
+
+redef class IssueCommentEvent
+
+       # Count posted comments
+       redef fun react_stats_event(game) do
+               if action == "created" then
+                       var player = comment.user.player(game)
+                       game.stats.inc("comments")
+                       player.stats.inc("comments")
+                       # FIXME use a more precise way to locate reviews
+                       if comment.is_ack then
+                               game.stats.inc("reviews")
+                               player.stats.inc("reviews")
+                       end
+                       game.save
+                       player.save
+               end
+       end
+end
index 14538c5..97078ab 100644 (file)
@@ -18,6 +18,7 @@
 module panels
 
 import templates_events
+import markdown
 
 # A panel can be displayed in a html page.
 #
@@ -98,6 +99,86 @@ class ErrorPanel
 
 end
 
+# A panel that display a markdown content rendered as HTML.
+class MDPanel
+       super Panel
+
+       # Markdown text to display.
+       var text: String
+
+       redef fun rendering do
+               add """<div class="panel">
+                           <div class="panel-body">{{{text.md_to_html}}}</div>
+                         </div>"""
+       end
+end
+
+# Display a list of active game.
+#
+# Used for NitRPG homepage.
+class GamesShortListPanel
+       super Panel
+
+       # Root url used for links.
+       var root_url: String
+
+       # List of NitRPG games to display.
+       var games: Array[Game]
+
+       redef fun render_title do
+               add "<span class=\"glyphicon glyphicon-home\"></span>&nbsp;&nbsp;"
+               add "<a href=\"{root_url}/games\">Active games</a>"
+       end
+
+       redef fun render_body do
+               if games.is_empty then
+                       add "<em>No game yet...</em>"
+                       return
+               end
+               var sorted = games.to_a
+               (new GamePlayersComparator).sort(sorted)
+               for game in sorted do
+                       add "{game.link} ({game.load_players.length} players)<br>"
+               end
+       end
+end
+
+# A panel that display a list of player in a repo.
+class GamesListPanel
+       super GamesShortListPanel
+       super TablePanel
+
+       redef fun render_title do
+               add "<span class=\"glyphicon glyphicon-home\"></span>&nbsp;&nbsp;"
+               add "<a href=\"{root_url}/games\">Active games</a>"
+       end
+
+       redef fun render_body do
+               if games.is_empty then
+                       add "<div class=\"panel-body\">"
+                       add "<em>No player yet...</em>"
+                       add "</div>"
+                       return
+               end
+               var sorted = games.to_a
+               (new GamePlayersComparator).sort(sorted)
+               add """<table class="table table-striped table-hover">
+                           <tr>
+                                <th>Game</th>
+                                <th>Players</th>
+                                <th>Achievements</th>
+                               </tr>"""
+               for game in sorted do
+                       add "<tr>"
+                       add " <td>{game.link}</td>"
+                       add " <td>{game.load_players.length}</td>"
+                       add " <td>{game.load_achievements.length}</td>"
+                       add "</tr>"
+               end
+               add "</table>"
+       end
+end
+
 # A panel that display repo statistics.
 class GameStatusPanel
        super Panel
@@ -279,16 +360,67 @@ class PlayerReviewsPanel
 
        redef fun render_title do
                add "<span class=\"glyphicon glyphicon-check\"></span>&nbsp;&nbsp;"
-               add "Review pull requests to gain nitcoins!"
+               add "Review pull requests and comment issues to gain nitcoins!"
        end
 
        redef fun render_body do
                var q = "is:open label:need_review sort:updated-asc " +
                        "-involves:{player.name}"
 
-               var issues = game.repo.search_issues(q)
+               var q2 = "is:open label:request_for_comments sort:updated-asc " +
+                       "-involves:{player.name}"
+
+               var issues = new ArraySet[Issue]
+               issues.add_all game.repo.search_issues(q).as(not null)
+               issues.add_all game.repo.search_issues(q2).as(not null)
+               if issues.is_empty then
+                       add "<em>No pull request or issue to review yet...</em>"
+                       return
+               end
+               for issue in issues do
+                       var user = issue.user
+                       var uplay = user.player(game)
+                       add """<div class="media">
+                               <a class="media-left" href="{{{uplay.url}}}">
+                                        <img class=\"img-circle\" style="width:50px"
+                                          src="{{{user.avatar_url}}}" alt="{{{uplay.name}}}">
+                                       </a>
+                                       <div class="media-body">
+                                        <h4 class="media-heading">
+                                               {{{issue.link}}} {{{issue.title}}}
+                                       </h4>
+                                        <span class="text-muted">opened by </span>
+                                        {{{uplay.link}}}
+                                       </div>
+                                  </div>"""
+               end
+       end
+end
+
+# A `Panel` that displays the work assigned or tagged.
+class PlayerWorkPanel
+       super Panel
+
+       # Repo to display.
+       var game: Game
+
+       # Player to display customized list for.
+       var player: Player
+
+       redef fun render_title do
+               add "<span class=\"glyphicon glyphicon-check\"></span>&nbsp;&nbsp;"
+               add "Do your tasks to gain nitcoins!"
+       end
+
+       redef fun render_body do
+               var q = "is:open label:need_work sort:updated-asc author:{player.name}"
+               var q2 = "is:open sort:updated-asc assignee:{player.name}"
+
+               var issues = new ArraySet[Issue]
+               issues.add_all game.repo.search_issues(q).as(not null)
+               issues.add_all game.repo.search_issues(q2).as(not null)
                if issues.is_empty then
-                       add "<em>No pull request to review yet...</em>"
+                       add "<em>No work to do yet...</em>"
                        return
                end
                for issue in issues do
index b27c457..38ed68e 100644 (file)
@@ -53,6 +53,79 @@ class RpgAction
                rsp.body = page.write_to_string
                return rsp
        end
+
+       # Returns the game with `name` or null if no game exists with this name.
+       fun load_game(name: String): nullable Game do
+               var repo = api.load_repo(name)
+               if api.was_error or repo == null then return null
+               var game = new Game(api, repo)
+               game.root_url = root_url
+               return game
+       end
+
+       # Returns the list of saved games from NitRPG data.
+       fun load_games: Array[Game] do
+               var res = new Array[Game]
+               var rpgdir = "nitrpg_data"
+               if not rpgdir.file_exists then return res
+               for user in rpgdir.files do
+                       for repo in "{rpgdir}/{user}".files do
+                               var game = load_game("{user}/{repo}")
+                               if game != null then res.add game
+                       end
+               end
+               return res
+       end
+end
+
+# Repo overview page.
+class RpgHome
+       super RpgAction
+
+       # Response page stub.
+       var page: NitRpgPage is noinit
+
+       redef fun answer(request, url) do
+               var readme = load_readme
+               var games = load_games
+               var response = new HttpResponse(200)
+               page = new NitRpgPage(root_url)
+               page.side_panels.add new GamesShortListPanel(root_url, games)
+               page.flow_panels.add new MDPanel(readme)
+               response.body = page.write_to_string
+               return response
+       end
+
+       # Load the string content of the nitrpg readme file.
+       private fun load_readme: String do
+               var readme = "README.md"
+               if not readme.file_exists then
+                       return "Unable to locate README file."
+               end
+               var file = new FileReader.open(readme)
+               var text = file.read_all
+               file.close
+               return text
+       end
+end
+
+# Display the list of active game.
+class ListGames
+       super RpgAction
+
+       # Response page stub.
+       var page: NitRpgPage is noinit
+
+       redef fun answer(request, url) do
+               var games = load_games
+               var response = new HttpResponse(200)
+               page = new NitRpgPage(root_url)
+               page.breadcrumbs = new Breadcrumbs
+               page.breadcrumbs.add_link(root_url / "games", "games")
+               page.flow_panels.add new GamesListPanel(root_url, games)
+               response.body = page.write_to_string
+               return response
+       end
 end
 
 # An action that require a game.
@@ -72,16 +145,15 @@ class GameAction
                var owner = request.param("owner")
                var repo_name = request.param("repo")
                if owner == null or repo_name == null then
-                       var msg = "Bad request: should look like /repos/:owner/:repo."
+                       var msg = "Bad request: should look like /games/:owner/:repo."
                        return bad_request(msg)
                end
-               var repo = new Repo(api, "{owner}/{repo_name}")
-               game = new Game(api, repo)
-               game.root_url = root_url
-               if api.was_error then
+               var game = load_game("{owner}/{repo_name}")
+               if game == null then
                        var msg = api.last_error.message
                        return bad_request("Repo Error: {msg}")
                end
+               self.game = game
                var response = new HttpResponse(200)
                page = new NitRpgPage(root_url)
                page.side_panels.add new GameStatusPanel(game)
@@ -103,6 +175,11 @@ class GameAction
 
        # From where to start the display of events related lists.
        var list_from = 0
+
+       # TODO should also check 201, 203 ...
+       private fun is_response_error(response: HttpResponse): Bool do
+               return response.status_code != 200
+       end
 end
 
 # Repo overview page.
@@ -111,6 +188,7 @@ class RepoHome
 
        redef fun answer(request, url) do
                var rsp = prepare_response(request, url)
+               if is_response_error(rsp) then return rsp
                page.side_panels.add new ShortListPlayersPanel(game)
                page.flow_panels.add new PodiumPanel(game)
                page.flow_panels.add new EventListPanel(game, list_limit, list_from)
@@ -126,6 +204,7 @@ class ListPlayers
 
        redef fun answer(request, url) do
                var rsp = prepare_response(request, url)
+               if is_response_error(rsp) then return rsp
                page.breadcrumbs.add_link(game.url / "players", "players")
                page.flow_panels.add new ListPlayersPanel(game)
                rsp.body = page.write_to_string
@@ -139,6 +218,7 @@ class PlayerHome
 
        redef fun answer(request, url) do
                var rsp = prepare_response(request, url)
+               if is_response_error(rsp) then return rsp
                var name = request.param("player")
                if name == null then
                        var msg = "Bad request: should look like /:owner/:repo/:players/:name."
@@ -153,6 +233,7 @@ class PlayerHome
                page.side_panels.clear
                page.side_panels.add new PlayerStatusPanel(game, player)
                page.flow_panels.add new PlayerReviewsPanel(game, player)
+               page.flow_panels.add new PlayerWorkPanel(game, player)
                page.flow_panels.add new AchievementsListPanel(player)
                page.flow_panels.add new EventListPanel(player, list_limit, list_from)
                rsp.body = page.write_to_string
@@ -166,6 +247,7 @@ class ListAchievements
 
        redef fun answer(request, url) do
                var rsp = prepare_response(request, url)
+               if is_response_error(rsp) then return rsp
                page.breadcrumbs.add_link(game.url / "achievements", "achievements")
                page.flow_panels.add new AchievementsListPanel(game)
                rsp.body = page.write_to_string
@@ -179,6 +261,7 @@ class AchievementHome
 
        redef fun answer(request, url) do
                var rsp = prepare_response(request, url)
+               if is_response_error(rsp) then return rsp
                var name = request.param("achievement")
                if name == null then
                        var msg = "Bad request: should look like /:owner/:repo/achievements/:achievement."
@@ -217,6 +300,8 @@ vh.routes.add new Route("/games/:owner/:repo/players", new ListPlayers(root))
 vh.routes.add new Route("/games/:owner/:repo/achievements/:achievement", new AchievementHome(root))
 vh.routes.add new Route("/games/:owner/:repo/achievements", new ListAchievements(root))
 vh.routes.add new Route("/games/:owner/:repo", new RepoHome(root))
+vh.routes.add new Route("/games", new ListGames(root))
+vh.routes.add new Route("/", new RpgHome(root))
 
 var fac = new HttpFactory.and_libevent
 fac.config.virtual_hosts.add vh
diff --git a/contrib/refund/.gitignore b/contrib/refund/.gitignore
new file mode 100644 (file)
index 0000000..f8f6caf
--- /dev/null
@@ -0,0 +1,3 @@
+bin/
+tests/out/
+stats.json
diff --git a/contrib/refund/Makefile b/contrib/refund/Makefile
new file mode 100644 (file)
index 0000000..e3b2579
--- /dev/null
@@ -0,0 +1,29 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+all: refund
+
+refund:
+       mkdir -p bin
+       ../../bin/nitc src/refund.nit -o bin/refund
+
+check: refund
+       cd tests; make
+
+clean:
+       rm -rf bin
+       rm -rf -- .nit_compile 2> /dev/null || true
+       cd tests; make clean
diff --git a/contrib/refund/src/refund.nit b/contrib/refund/src/refund.nit
new file mode 100644 (file)
index 0000000..02e0af1
--- /dev/null
@@ -0,0 +1,132 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+# Insurance refunds calculation tool.
+#
+# `refund` computes automatically the allowed refund for a reclamation according
+# to an insurrance policy.
+#
+# Usage:
+#
+# ~~~sh
+# > refund (<input_file> <output_file> | [OPTIONS])
+# ~~~
+#
+# Input file:
+#
+# `refund` expects a JSON input file on the form:
+#
+# ~~~json
+# {
+#  "dossier": "A100323",
+#  "mois": "2015-01",
+#  "reclamations": [
+#   {
+#    "soin": 100,
+#    "date": "2015-01-11",
+#    "montant": "234.00$"
+#   }, {
+#    "soin": 200,
+#    "date": "2015-01-13",
+#    "montant": "128.00$"
+#   }, {
+#    "soin": 334,
+#    "date": "2015-01-23",
+#    "montant": "50.00$"
+#   }
+#  ]
+# }
+# ~~~
+#
+# Output file:
+#
+# You have to specify the path where `refund` should output the result file.
+#
+# Results are formatted as JSON:
+#
+# ~~~json
+# {
+#  "client": "100323",
+#  "mois": "2015-01",
+#  "remboursements": [
+#   {
+#    "soin": 100,
+#    "date": "2015-01-11",
+#    "montant": "58.50$"
+#   }, {
+#    "soin": 200,
+#    "date": "2015-01-13",
+#    "montant": "22.50$"
+#   }, {
+#    "soin": 334,
+#    "date": "2015-01-23",
+#    "montant": "0.00$"
+#   }
+#  ]
+# }
+# ~~~
+#
+# Options:
+#
+# `refund` can generate statistics about reclamations and refunds computed.
+#
+# * `-S`: display statistics
+# * `-SR`: reset statistics
+#
+# Error handling:
+#
+# In case of error, a JSON object is generated in place of the output file:
+#
+# ~~~json
+# { "message": "Invalid input data" }
+# ~~~
+module refund
+
+
+import refund_json
+
+# Display usage in console then leave.
+fun usage do
+       print ""
+       print "Usage:"
+       print "refund <input.json> <output.json>"
+       print ""
+       print "options"
+       print " -S\tShow stats in console"
+       print " -RS\tClear stats"
+       exit 1
+end
+
+var proc = new RefundProcessor
+
+if args.length == 1 then
+       var flag = args.first
+       if flag == "-RS" then
+               proc.clear_stats
+               exit 0
+       else if flag == "-S" then
+               proc.show_stats
+               exit 0
+       else
+               print "Error: Unknown flag {flag}."
+               usage
+       end
+else if args.length != 2 then
+       print "Error: Incorrect number of arguments. Got {args.length}, expected 2."
+       usage
+end
+
+proc.process(args[0], args[1])
diff --git a/contrib/refund/src/refund_base.nit b/contrib/refund/src/refund_base.nit
new file mode 100644 (file)
index 0000000..fbd5fee
--- /dev/null
@@ -0,0 +1,421 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+# Insurance refunds calculation base classes.
+module refund_base
+
+import counter
+
+# `RefundProcessor` manages the calculation of the refunds.
+#
+# See `process`.
+class RefundProcessor
+
+       # Where to generate output file.
+       var output_file: String is noinit, writable
+
+       # Where to save usage statistics.
+       var stats_file = "stats.json"
+
+       # Processes the `input_file` and write the output in `output_file`.
+       #
+       # Steps:
+       #
+       # 1. Parses the input_file and check json validity (see `load_input`).
+       # 2. Instantiates and checks the reclamation sheet against client rules
+       #   (see `ReclamationSheet.from_json`).
+       # 3. Processes refunds (see `proces_refunds`).
+       # 4. Writes the output file (see `write_output`).
+       fun process(input_file, output_file: String) is abstract
+
+       # Refunds allowed for the current reclamation sheet.
+       var current_refunds = new HashMap[Care, Dollar]
+
+       # Computes allowed refunds for a given `Reclamation` found in a `ReclamationSheet`.
+       fun process_refund(sheet: ReclamationSheet, recl: Reclamation): Dollar is abstract
+
+       # Shows stats values in console
+       fun show_stats do print load_stats
+
+       # Loads stats from file as a RefundStats instance.
+       fun load_stats: RefundStats is abstract
+
+       # Saves stats in file.
+       fun save_stats(stats: RefundStats) is abstract
+
+       # Outputs error object then exit.
+       fun die(msg: String) is abstract
+
+       # Clears stats.
+       #
+       # Basically delete the stats file.
+       fun clear_stats do if stats_file.file_exists then stats_file.file_delete
+end
+
+# Stats representation using a `Counter`.
+class RefundStats
+       super Counter[String]
+end
+
+# A `Client` can ask for refunds from the insurance company.
+class Client
+
+       # Client number.
+       var number: String
+
+       redef fun to_s do return "#{number}"
+end
+
+# A `ReclamationSheet` is filled by the `Client` to obtain a `RefundSheet`.
+class ReclamationSheet
+
+       # File used for this refund.
+       var file: ReclFile is writable
+
+       # Month concerned by the refund.
+       var month: ReclMonth is writable
+
+       # Array of reclamations.
+       var recls = new Array[Reclamation] is writable
+
+       redef fun to_s do
+               return "Refund (file: {file}, month: {month}, recls: {recls.length})"
+       end
+end
+
+# A File found in a `ReclamationSheet`.
+#
+# A File points to a `Contract` and a `Client`.
+#
+# Allowed format is: `X12345` where `X` is the contract kind and `12345` is the
+# client number.
+class ReclFile
+
+       # File string id.
+       var id: String is writable
+
+       # Contract instance linked to this file.
+       var contract: Contract is noinit, writable
+
+       # Client instance linked to this file.
+       var client: Client is noinit, writable
+
+       # Returns the contract instance corresponding to `kind`.
+       fun contract_factory(proc: RefundProcessor, kind: String): Contract do
+               if kind == "A" then return new ContractA
+               if kind == "B" then return new ContractB
+               if kind == "C" then return new ContractC
+               if kind == "D" then return new ContractD
+               if kind == "E" then return new ContractE
+               proc.die("Unknown contract {kind}")
+               abort
+       end
+
+       redef fun to_s do return "{contract.kind}{client.number}"
+end
+
+# Month date formatted for contracts.
+#
+# Mainly used to factorize treatments on date calculation.
+class ReclMonth
+
+       # Internal date used to store the month.
+       var date: ReclDate is writable
+
+       # Is `date` in this month?
+       fun has(date: ReclDate): Bool do return self.date.month == date.month
+
+       redef fun to_s do
+               if date.month < 10 then
+                       return "{date.year}-0{date.month}"
+               end
+               return "{date.year}-0{date.month}"
+       end
+end
+
+# The date on which a `Care` occured.
+class ReclDate
+       # Year of the month.
+       var year: Int is writable
+
+       # Month number (`1` is January).
+       var month: Int is writable
+
+       # Day number.
+       var day: Int is writable
+
+       redef fun to_s do
+               var res = new FlatBuffer
+               res.append "{year}-"
+               if month < 10 then
+                       res.append "0{month}-"
+               else
+                       res.append "{month}-"
+               end
+               if day < 10 then
+                       res.append "0{day}"
+               else
+                       res.append day.to_s
+               end
+               return res.write_to_string
+       end
+end
+
+# `RefundRecl` are parts of the `RefundReclamation`.
+class Reclamation
+       # `Care` id concerned by this reclamation.
+       var care_id: Int is writable
+
+       # Date this care was applied.
+       var date: ReclDate is writable
+
+       # Amount of money given by the `Client` in exchange of this care.
+       var fees: Dollar is writable
+
+       redef fun to_s do return "Entry (care: {care_id}, date: {date}, fees: {fees})"
+end
+
+# A `Contract` specifies the refund applicable on care.
+class Contract
+
+       # Kind of the contract (specified by a letter).
+       var kind: String is noinit, writable
+
+       # Covered cares for this kind of contract.
+       var cares = new Array[Care] is writable
+
+       # Adds a care to this contract.
+       fun add_care(care: Care) do cares.add care
+
+       # Gets a `Care` instance by its id.
+       #
+       # Returns `null` if no `Care` found.
+       fun care_by_id(id: Int): nullable Care do
+               for care in cares do
+                       if care.match_id(id) then return care
+               end
+               return null
+       end
+
+       redef fun to_s do return "{kind} ({cares.length} cares)"
+end
+
+# Contracts
+# FIXME move contracts to a JSON configuration file.
+
+private class ContractA
+       super Contract
+
+       init do
+               kind = "A"
+               add_care(new UniqCare.with_vals(0,   25.0, null, null))
+               add_care(new UniqCare.with_vals(100, 35.0, null, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(175, 50.0, null, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 25.0, null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 0.0, null, null))
+               add_care(new UniqCare.with_vals(400, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(500, 25.0, null, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 40.0, null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 0.0,  null, null))
+       end
+end
+
+private class ContractB
+       super Contract
+
+       init do
+               kind = "B"
+               add_care(new UniqCare.with_vals(0,   50.0, 40.0.to_dollar, null))
+               add_care(new UniqCare.with_vals(100, 50.0, 50.0.to_dollar, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(175, 75.0, null, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 100.0,null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 50.0, null, null))
+               add_care(new UniqCare.with_vals(400, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(500, 50.0, 50.0.to_dollar, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 100.0,null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 70.0, null, null))
+       end
+end
+
+private class ContractC
+       super Contract
+
+       init do
+               kind = "C"
+               add_care(new UniqCare.with_vals(0,   90.0, null, null))
+               add_care(new UniqCare.with_vals(100, 95.0, null, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 85.0, null, null))
+               add_care(new UniqCare.with_vals(175, 90.0, null, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 90.0, null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 90.0, null, null))
+               add_care(new UniqCare.with_vals(400, 90.0, null, null))
+               add_care(new UniqCare.with_vals(500, 90.0, null, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 75.0, null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 90.0, null, null))
+       end
+end
+
+private class ContractD
+       super Contract
+
+       init do
+               kind = "D"
+               add_care(new UniqCare.with_vals(0,   100.0, 85.0.to_dollar,  null))
+               add_care(new UniqCare.with_vals(100, 100.0, 75.0.to_dollar,  250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 100.0, 150.0.to_dollar, null))
+               add_care(new UniqCare.with_vals(175, 95.0,  null,  200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 100.0, 100.0.to_dollar, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399],100.0, null, null))
+               add_care(new UniqCare.with_vals(400, 100.0, 65.0.to_dollar,  null))
+               add_care(new UniqCare.with_vals(500, 100.0, null,  150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 100.0, 100.0.to_dollar, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 100.0, 90.0.to_dollar, null))
+       end
+end
+
+private class ContractE
+       super Contract
+
+       init do
+               kind = "E"
+               add_care(new UniqCare.with_vals(0,   15.0, null, null))
+               add_care(new UniqCare.with_vals(100, 25.0, null, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 15.0, null, null))
+               add_care(new UniqCare.with_vals(175, 25.0, 20.0.to_dollar, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 12.0, null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 60.0, null, null))
+               add_care(new UniqCare.with_vals(400, 25.0, 15.0.to_dollar, null))
+               add_care(new UniqCare.with_vals(500, 30.0, 20.0.to_dollar, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 15.0, null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 22.0, null, null))
+       end
+end
+
+# A `Care` is payed by the `Client` and can raises a `Refund`.
+interface Care
+
+       # Does `id` is acceptable for this care?
+       fun match_id(id: Int): Bool is abstract
+
+       # Percent covered for this kind of care.
+       fun cover: Float is abstract
+
+       # Max amount covered for this kind of care by reclamation.
+       fun max: nullable Dollar is abstract
+
+       # Max amount covered for this kind of care by month.
+       fun month_max: nullable Dollar is abstract
+
+       # Computes the refund for this care.
+       fun process_refund(fees: Dollar): Dollar do
+               var max = self.max
+               var val = ((fees.value.to_f * (cover / 100.0)) / 100.0).to_dollar
+               if max != null and val > max then val = max
+               return val
+       end
+end
+
+# A `UniqCare` refers to one and only one kind of `Care`.
+#
+# For example, the care `Ostéopathie` as the uniq id `200`.
+class UniqCare
+       super Care
+
+       # Care id.
+       var id: Int
+
+       redef fun match_id(id) do return self.id == id
+
+       redef var cover = 0.0
+       redef var max = null
+       redef var month_max = null
+
+       # Inits this `Care` with values.
+       #
+       # * `id`: the `Care` id.
+       # * `cover`: refund percentage covered for this `Care`.
+       # * `max`: max amount refunded for this `Care` in a reclamation sheet.
+       # * `month_max`: max amount refunded by month.
+       init with_vals(id: Int, cover: Float, max, month_max: nullable Dollar) do
+               self.id = id
+               self.cover = cover
+               self.max = max
+               self.month_max = month_max
+       end
+
+       redef fun to_s do return id.to_s
+end
+
+# A `RangeCare` refers to a set of id corresponding to the same `Care`.
+#
+# For example, the care `Soins Dentaires` is refered by the ids 300 to 399.
+class RangeCare
+       super Care
+
+       # Care id range.
+       var id: Range[Int]
+
+       redef fun match_id(id) do return self.id.has(id)
+       redef var cover = 0.0
+       redef var max = null
+       redef var month_max = null
+
+       # Inits this `Care` with values.
+       #
+       # * `id`: the `Care` id.
+       # * `cover`: refund percentage covered for this `Care`.
+       # * `max`: max amount refunded for this `Care` in a reclamation sheet.
+       # * `month_max`: max amount refunded by month.
+       init with_vals(id: Range[Int], cover: Float, max, month_max: nullable Dollar) do
+               self.id = id
+               self.cover = cover
+               self.max = max
+               self.month_max = month_max
+       end
+
+       redef fun to_s do return id.first.to_s
+end
+
+# Used to represent currencies values.
+class Dollar
+       super Comparable
+
+       redef type OTHER: Dollar
+
+       # Amount of cents.
+       var value: Int
+
+       # Inits `self` from a float `value`.
+       init from_float(value: Float) do
+               self.value = (value * 100.0).to_i
+       end
+
+       redef fun to_s do return "{value / 100}.{value % 100}$"
+       redef fun <(o) do return value < o.value
+
+       # Dollars addition.
+       fun +(o: Dollar): Dollar do return new Dollar(value + o.value)
+
+       # Dollars substraction.
+       fun -(o: Dollar): Dollar do return new Dollar(value - o.value)
+end
+
+redef class Float
+       # Returns `self` as a Dollar instance.
+       fun to_dollar: Dollar do return new Dollar.from_float(self)
+end
diff --git a/contrib/refund/src/refund_json.nit b/contrib/refund/src/refund_json.nit
new file mode 100644 (file)
index 0000000..33032b3
--- /dev/null
@@ -0,0 +1,326 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+# JSON handling for `refund`.
+module refund_json
+
+import refund_base
+import json::static
+
+redef class RefundProcessor
+
+       redef fun process(input_file, output_file) do
+               self.output_file = output_file
+               var json = load_input(input_file)
+               var sheet = new ReclamationSheet.from_json(self, json)
+               var res = process_refunds(sheet)
+               write_output(res.to_pretty_json, output_file)
+       end
+
+       # Computes allowed refunds for a given `ReclamationSheet`.
+       fun process_refunds(sheet: ReclamationSheet): JsonObject do
+               # update stats
+               var stats = load_stats
+               stats.inc("total_treatments")
+               # compute refunds
+               current_refunds.clear
+               var json = new JsonObject
+               json["dossier"] = sheet.file.to_s
+               json["mois"] = sheet.month.to_s
+               var arr = new JsonArray
+               var sum = 0.0.to_dollar
+               for recl in sheet.recls do
+                       var refund = process_refund(sheet, recl)
+                       var obj = new JsonObject
+                       obj["soin"] = recl.care_id
+                       obj["date"] = recl.date.to_s
+                       obj["montant"] = refund.to_s
+                       arr.add obj
+                       sum += refund
+                       # update stats for care
+                       stats.inc("total_{recl.care_id}")
+               end
+               save_stats(stats)
+               json["remboursements"] = arr
+               json["total"] = sum.to_s
+               return json
+       end
+
+       # Loads the input string and returns its content as a JsonObject.
+       #
+       # Dies if the file cannot be read or does not contain a valid JSONObject.
+       fun load_input(file: String): JsonObject do
+               if not file.file_exists then
+                       die("File `{file}` not found.")
+                       abort
+               end
+               var ptr = new FileReader.open(file)
+               var json = ptr.read_all.parse_json
+               if json isa JsonParseError then
+                       die("Wrong input file ({json.message})")
+                       abort
+               else if not json isa JsonObject then
+                       die("Wrong input type (expected JsonObject got {json.class_name})")
+                       abort
+               end
+               ptr.close
+               return json
+       end
+
+       # Writes `str` in path specified by `file`.
+       #
+       # Used to produce output and stats.
+       fun write_output(str: String, file: String) do
+               var ofs = new FileWriter.open(file)
+               ofs.write(str)
+               ofs.close
+       end
+
+       # UTILS
+
+       # Does `json` contains `key`? Dies otherwise.
+       private fun check_key(json: JsonObject, key: String) do
+               if json.has_key(key) then return
+               die("Malformed input (missing key {key})")
+       end
+
+       # Does `str` match the regex `re`.
+       private fun check_format(str, re: String): Bool do
+               return str.has(re.to_re)
+       end
+
+       redef fun die(msg) do
+               # save error
+               var obj = new JsonObject
+               obj["message"] = msg
+               write_output(obj.to_pretty_json, output_file)
+               # update stats
+               var stats = load_stats
+               stats.inc("total_reject")
+               save_stats(stats)
+               # leave
+               exit 1
+       end
+
+       redef fun show_stats do print load_stats.to_json.to_pretty_json
+
+       redef fun load_stats do
+               # If no stats found, return a new object
+               if not stats_file.file_exists then return new RefundStats
+               # Try to read from file
+               var ifs = new FileReader.open(stats_file)
+               var content = ifs.read_all.parse_json
+               ifs.close
+               # If file is corrupted, return a new object
+               if not content isa JsonObject then return new RefundStats
+               # Return file contained stats
+               return new RefundStats.from_json(content)
+       end
+
+       redef fun save_stats(stats: RefundStats) do
+               write_output(stats.to_json.to_pretty_json, stats_file)
+       end
+end
+
+redef class RefundStats
+
+       # Inits `self` from the content of a JsonObject
+       init from_json(json: JsonObject) do
+               for k, v in json do self[k] = v.as(Int)
+       end
+
+       # Outputs `self` as a JSON string.
+       fun to_json: JsonObject do
+               var obj = new JsonObject
+               for k, v in self do obj[k] = v
+               return obj
+       end
+end
+
+redef class ReclamationSheet
+
+       # Inits `self` from the content of a `JsonObject`.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               file = new ReclFile.from_json(proc, json)
+               month = new ReclMonth.from_json(proc, json)
+               recls = parse_recls(proc, json)
+               init(file, month)
+       end
+
+       # Parses and checks the given `json` then returns an array of `Reclamation` instances.
+       private fun parse_recls(proc: RefundProcessor, json: JsonObject): Array[Reclamation] do
+               proc.check_key(json, "reclamations")
+               var res = new Array[Reclamation]
+               var recls = json["reclamations"]
+               if not recls isa JsonArray then
+                       proc.die("Wrong type for `number` (expected JsonArray got {recls.class_name})")
+                       abort
+               end
+               var i = 0
+               for obj in recls do
+                       if not obj isa JsonObject then
+                               proc.die("Wrong type for `reclamations#{i}` " +
+                                       "(expected JsonObject got {obj.class_name})")
+                               abort
+                       end
+                       var recl = new Reclamation.from_json(proc, obj)
+                       if not month.has(recl.date) then
+                               proc.die("Wrong `mois` for `soin` with id `{recl.care_id}`")
+                               abort
+                       end
+                       if file.contract.care_by_id(recl.care_id) == null then
+                               proc.die("Unknown `soin` with id `{recl.care_id}`")
+                               abort
+                       end
+                       res.add recl
+                       i += 1
+               end
+               return res
+       end
+end
+
+redef class ReclFile
+       # Inits `self` from the content of a JsonObject.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               proc.check_key(json, "dossier")
+               var id = json["dossier"]
+               if not id isa String then
+                       proc.die("Wrong type for `dossier` (expected String got {id.class_name})")
+                       abort
+               end
+               # Check format
+               parse_contract(proc, id)
+               parse_client(proc, id)
+               init(id)
+       end
+
+       # Tries to parse the contract from `file_id` string.
+       private fun parse_contract(proc: RefundProcessor, file_id: String) do
+               var kind = file_id.first.to_s
+               if not proc.check_format(kind, "^[A-E]\{1\}$") then
+                       proc.die("Wrong contract (expected A, B, C, D or E got {kind})")
+               end
+               contract = contract_factory(proc, kind)
+       end
+
+       # Tries to parse the client number from the `file_id` string.
+       private fun parse_client(proc: RefundProcessor, file_id: String) do
+               var num = file_id.substring_from(1)
+               if not proc.check_format(num, "^[0-9]\{6\}$") then
+                       proc.die("Wrong format for `number` (expected XXXXXX got {num})")
+                       abort
+               end
+               client = new Client(num)
+       end
+end
+
+redef class ReclMonth
+       # Inits `self` from a `JsonObject`.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               proc.check_key(json, "mois")
+               var month = json["mois"]
+               if not month isa String then
+                       proc.die("Wrong type for `mois` (expected String got {month.class_name})")
+                       return
+               end
+               if not proc.check_format(month, "^[0-9]\{4\}-[0-9]\{2\}$") then
+                       proc.die("Wrong format for `mois` (expected AAAA-MM got {month})")
+                       return
+               end
+               from_string(proc, month)
+       end
+
+       # Inits `self` from a string representation formatted as `AAAA-MM`.
+       init from_string(proc: RefundProcessor, str: String) do
+               var parts = str.split("-")
+               var year = parts[0].to_i
+               var month = parts[1].to_i
+               if month < 1 or month > 12 then
+                       proc.die("Wrong format for `mois` (expected AAAA-MM got {str})")
+                       return
+               end
+               date = new ReclDate(year, month, 1)
+               init(date)
+       end
+end
+
+redef class ReclDate
+       # Inits `self` from a `JsonObject`.
+       #
+       # Dies if the `json` input is invalid.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               proc.check_key(json, "date")
+               var date = json["date"]
+               if not date isa String then
+                       proc.die("Wrong type for `date` (expected String got {date.class_name})")
+                       abort
+               end
+               if not proc.check_format(date, "^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}$") then
+                       proc.die("Wrong format for `date` (expected AAAA-MM-DD got {date})")
+                       abort
+               end
+               from_string(proc, date)
+       end
+
+       # Inits `self` from its string representation formatted as `AAAA-MM`.
+       init from_string(proc: RefundProcessor, str: String) do
+               var parts = str.split("-")
+               year = parts[0].to_i
+               month = parts[1].to_i
+               day = parts[2].to_i
+               if month < 1 or month > 12 or day < 1 or day > 31 then
+                       proc.die("Wrong format for `mois` (expected AAAA-MM got {str})")
+                       abort
+               end
+               init(year, month, day)
+       end
+end
+
+redef class Reclamation
+       # Inits `self` from a `JsonObject`.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               care_id = parse_care_id(proc, json)
+               date = new ReclDate.from_json(proc, json)
+               fees = parse_fees(proc, json)
+               init(care_id, date, fees)
+       end
+
+       # Inits `self` from its string representation formatted as `Int`.
+       private fun parse_care_id(proc: RefundProcessor, json: JsonObject): Int do
+               proc.check_key(json, "soin")
+               var id = json["soin"]
+               if not id isa Int then
+                       proc.die("Wrong type for `soin` (expected Int got {id.class_name})")
+                       abort
+               end
+               return id
+       end
+
+       # Inits `self` from its string representation formatted as `0.00$`.
+       private fun parse_fees(proc: RefundProcessor, json: JsonObject): Dollar do
+               proc.check_key(json, "montant")
+               var fees = json["montant"]
+               if not fees isa String then
+                       proc.die("Wrong type for `fees` (expected String got {fees.class_name})")
+                       abort
+               end
+               if not proc.check_format(fees, "^[0-9]+((\\.|\\,)[0-9]+)?\\$$") then
+                       proc.die("Wrong format for `montant` (expected XX.XX$ got {fees})")
+                       abort
+               end
+               return new Dollar.from_float(fees.basename("$").to_f)
+       end
+end
diff --git a/contrib/refund/tests/Makefile b/contrib/refund/tests/Makefile
new file mode 100644 (file)
index 0000000..0dce637
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright 2013 Alexandre Terrasa <alexandre@moz-code.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.
+
+all: tests
+
+tests: clean
+       ./tests.sh
+
+clean:
+       rm -rf out/
diff --git a/contrib/refund/tests/client_error1.json b/contrib/refund/tests/client_error1.json
new file mode 100644 (file)
index 0000000..eef9501
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/client_error2.json b/contrib/refund/tests/client_error2.json
new file mode 100644 (file)
index 0000000..a6011f9
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A1003233",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/client_error3.json b/contrib/refund/tests/client_error3.json
new file mode 100644 (file)
index 0000000..7a2fe14
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A10032A",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/client_error4.json b/contrib/refund/tests/client_error4.json
new file mode 100644 (file)
index 0000000..025d228
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": 1003233,
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA1.json b/contrib/refund/tests/contractA1.json
new file mode 100644 (file)
index 0000000..21ebb8b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA2.json b/contrib/refund/tests/contractA2.json
new file mode 100644 (file)
index 0000000..13373a1
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 0,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA3.json b/contrib/refund/tests/contractA3.json
new file mode 100644 (file)
index 0000000..c119435
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA4.json b/contrib/refund/tests/contractA4.json
new file mode 100644 (file)
index 0000000..d6d02b4
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200,00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA5.json b/contrib/refund/tests/contractA5.json
new file mode 100644 (file)
index 0000000..ca6f222
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "reclamations": [
+               {
+                       "soin": 175,
+                       "date": "2015-01-11",
+                       "montant": "130.00$"
+               },
+               {
+                       "soin": 175,
+                       "date": "2015-01-14",
+                       "montant": "130.00$"
+               },
+               {
+                       "soin": 175,
+                       "date": "2015-01-15",
+                       "montant": "130.00$"
+               },
+               {
+                       "soin": 175,
+                       "date": "2015-01-17",
+                       "montant": "130.00$"
+               }
+       ]
+}
diff --git a/contrib/refund/tests/contractB1.json b/contrib/refund/tests/contractB1.json
new file mode 100644 (file)
index 0000000..31afc35
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB2.json b/contrib/refund/tests/contractB2.json
new file mode 100644 (file)
index 0000000..16af82c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB3.json b/contrib/refund/tests/contractB3.json
new file mode 100644 (file)
index 0000000..b2df55a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB4.json b/contrib/refund/tests/contractB4.json
new file mode 100644 (file)
index 0000000..555766f
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200,00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200,00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB5.json b/contrib/refund/tests/contractB5.json
new file mode 100644 (file)
index 0000000..0ea3611
--- /dev/null
@@ -0,0 +1,41 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-11",
+            "montant": "1400,00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractC1.json b/contrib/refund/tests/contractC1.json
new file mode 100644 (file)
index 0000000..628f9e6
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "C100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "100.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-13",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 399,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractC2.json b/contrib/refund/tests/contractC2.json
new file mode 100644 (file)
index 0000000..c9f2a9a
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "dossier": "C100323",
+    "mois": "2015-01",
+    "reclamations": []
+}
diff --git a/contrib/refund/tests/contractC3.json b/contrib/refund/tests/contractC3.json
new file mode 100644 (file)
index 0000000..a502605
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "C100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractD1.json b/contrib/refund/tests/contractD1.json
new file mode 100644 (file)
index 0000000..7a47a3f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-13",
+            "montant": "900.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "100.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractD2.json b/contrib/refund/tests/contractD2.json
new file mode 100644 (file)
index 0000000..c7fb96f
--- /dev/null
@@ -0,0 +1,26 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "0.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractD3.json b/contrib/refund/tests/contractD3.json
new file mode 100644 (file)
index 0000000..7580bbf
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+       ]
+}
diff --git a/contrib/refund/tests/contractD4.json b/contrib/refund/tests/contractD4.json
new file mode 100644 (file)
index 0000000..55e50f5
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractE1.json b/contrib/refund/tests/contractE1.json
new file mode 100644 (file)
index 0000000..91ba4c1
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-13",
+            "montant": "900.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "100.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractE2.json b/contrib/refund/tests/contractE2.json
new file mode 100644 (file)
index 0000000..d805d2b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractE3.json b/contrib/refund/tests/contractE3.json
new file mode 100644 (file)
index 0000000..4cfed1b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 500,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+       ]
+}
diff --git a/contrib/refund/tests/contractE4.json b/contrib/refund/tests/contractE4.json
new file mode 100644 (file)
index 0000000..6c16688
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error1.json b/contrib/refund/tests/contract_error1.json
new file mode 100644 (file)
index 0000000..feb423f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error2.json b/contrib/refund/tests/contract_error2.json
new file mode 100644 (file)
index 0000000..4aac886
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "a100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error3.json b/contrib/refund/tests/contract_error3.json
new file mode 100644 (file)
index 0000000..271111c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "Z100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error4.json b/contrib/refund/tests/contract_error4.json
new file mode 100644 (file)
index 0000000..30bd236
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "100100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/dossier_error1.json b/contrib/refund/tests/dossier_error1.json
new file mode 100644 (file)
index 0000000..be5cdc3
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/json_error1.json b/contrib/refund/tests/json_error1.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/contrib/refund/tests/json_error2.json b/contrib/refund/tests/json_error2.json
new file mode 100644 (file)
index 0000000..fe51488
--- /dev/null
@@ -0,0 +1 @@
+[]
diff --git a/contrib/refund/tests/json_error3.json b/contrib/refund/tests/json_error3.json
new file mode 100644 (file)
index 0000000..98232c6
--- /dev/null
@@ -0,0 +1 @@
+{
diff --git a/contrib/refund/tests/month_error1.json b/contrib/refund/tests/month_error1.json
new file mode 100644 (file)
index 0000000..9f8213e
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/month_error2.json b/contrib/refund/tests/month_error2.json
new file mode 100644 (file)
index 0000000..d1f4321
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": 10,
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/month_error3.json b/contrib/refund/tests/month_error3.json
new file mode 100644 (file)
index 0000000..734fc6a
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015/01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/month_error4.json b/contrib/refund/tests/month_error4.json
new file mode 100644 (file)
index 0000000..26faacf
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-23",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error1.json b/contrib/refund/tests/recl_date_error1.json
new file mode 100644 (file)
index 0000000..46654c1
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error2.json b/contrib/refund/tests/recl_date_error2.json
new file mode 100644 (file)
index 0000000..b26aac6
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015/01/11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error3.json b/contrib/refund/tests/recl_date_error3.json
new file mode 100644 (file)
index 0000000..b11c1a9
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-13-32",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error4.json b/contrib/refund/tests/recl_date_error4.json
new file mode 100644 (file)
index 0000000..b40c028
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-02-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_error1.json b/contrib/refund/tests/recl_error1.json
new file mode 100644 (file)
index 0000000..664374e
--- /dev/null
@@ -0,0 +1,4 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01"
+}
diff --git a/contrib/refund/tests/recl_error2.json b/contrib/refund/tests/recl_error2.json
new file mode 100644 (file)
index 0000000..25d29f6
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": {
+        "1": {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        "2": {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        "3": {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    }
+}
diff --git a/contrib/refund/tests/recl_error3.json b/contrib/refund/tests/recl_error3.json
new file mode 100644 (file)
index 0000000..eaeb509
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [1, 2, 3]
+}
diff --git a/contrib/refund/tests/recl_error4.json b/contrib/refund/tests/recl_error4.json
new file mode 100644 (file)
index 0000000..c1218bd
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {},
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error1.json b/contrib/refund/tests/recl_fees_error1.json
new file mode 100644 (file)
index 0000000..164d3f0
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error2.json b/contrib/refund/tests/recl_fees_error2.json
new file mode 100644 (file)
index 0000000..8bd0eb5
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "ABCD"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error3.json b/contrib/refund/tests/recl_fees_error3.json
new file mode 100644 (file)
index 0000000..a51948e
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error4.json b/contrib/refund/tests/recl_fees_error4.json
new file mode 100644 (file)
index 0000000..baf4d5b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_soin_error1.json b/contrib/refund/tests/recl_soin_error1.json
new file mode 100644 (file)
index 0000000..35f0425
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_soin_error2.json b/contrib/refund/tests/recl_soin_error2.json
new file mode 100644 (file)
index 0000000..34ffd0b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": "200",
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_soin_error3.json b/contrib/refund/tests/recl_soin_error3.json
new file mode 100644 (file)
index 0000000..acf7c8d
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 900,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/res/client_error1.res b/contrib/refund/tests/res/client_error1.res
new file mode 100644 (file)
index 0000000..379d67e
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `number` (expected XXXXXX got )"
+}
diff --git a/contrib/refund/tests/res/client_error2.res b/contrib/refund/tests/res/client_error2.res
new file mode 100644 (file)
index 0000000..0984ee4
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `number` (expected XXXXXX got 1003233)"
+}
diff --git a/contrib/refund/tests/res/client_error3.res b/contrib/refund/tests/res/client_error3.res
new file mode 100644 (file)
index 0000000..3490290
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `number` (expected XXXXXX got 10032A)"
+}
diff --git a/contrib/refund/tests/res/client_error4.res b/contrib/refund/tests/res/client_error4.res
new file mode 100644 (file)
index 0000000..975c246
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `dossier` (expected String got Int)"
+}
diff --git a/contrib/refund/tests/res/contractA1.res b/contrib/refund/tests/res/contractA1.res
new file mode 100644 (file)
index 0000000..4d0387b
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "81.89$"
+       }, {
+               "soin": 200,
+               "date": "2015-01-13",
+               "montant": "22.50$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-23",
+               "montant": "0.0$"
+       }],
+       "total": "104.39$"
+}
diff --git a/contrib/refund/tests/res/contractA2.res b/contrib/refund/tests/res/contractA2.res
new file mode 100644 (file)
index 0000000..cb578a2
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 0,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-23",
+               "montant": "0.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-13",
+               "montant": "36.0$"
+       }],
+       "total": "86.0$"
+}
diff --git a/contrib/refund/tests/res/contractA3.res b/contrib/refund/tests/res/contractA3.res
new file mode 100644 (file)
index 0000000..5cbc843
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "100.0$"
+       }],
+       "total": "100.0$"
+}
diff --git a/contrib/refund/tests/res/contractA4.res b/contrib/refund/tests/res/contractA4.res
new file mode 100644 (file)
index 0000000..5cbc843
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "100.0$"
+       }],
+       "total": "100.0$"
+}
diff --git a/contrib/refund/tests/res/contractA5.res b/contrib/refund/tests/res/contractA5.res
new file mode 100644 (file)
index 0000000..d30e4ba
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "65.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-14",
+               "montant": "65.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-15",
+               "montant": "65.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-17",
+               "montant": "5.0$"
+       }],
+       "total": "200.0$"
+}
diff --git a/contrib/refund/tests/res/contractB1.res b/contrib/refund/tests/res/contractB1.res
new file mode 100644 (file)
index 0000000..39a5161
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 200,
+               "date": "2015-01-13",
+               "montant": "90.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-23",
+               "montant": "200.0$"
+       }],
+       "total": "340.0$"
+}
diff --git a/contrib/refund/tests/res/contractB2.res b/contrib/refund/tests/res/contractB2.res
new file mode 100644 (file)
index 0000000..559dcfd
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "69.0$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "0.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "300.0$"
+       }],
+       "total": "369.0$"
+}
diff --git a/contrib/refund/tests/res/contractB3.res b/contrib/refund/tests/res/contractB3.res
new file mode 100644 (file)
index 0000000..3556ba0
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "150.0$"
+       }],
+       "total": "150.0$"
+}
diff --git a/contrib/refund/tests/res/contractB4.res b/contrib/refund/tests/res/contractB4.res
new file mode 100644 (file)
index 0000000..3556ba0
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "150.0$"
+       }],
+       "total": "150.0$"
+}
diff --git a/contrib/refund/tests/res/contractB5.res b/contrib/refund/tests/res/contractB5.res
new file mode 100644 (file)
index 0000000..9a31198
--- /dev/null
@@ -0,0 +1,34 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-11",
+               "montant": "300.0$"
+       }],
+       "total": "550.0$"
+}
diff --git a/contrib/refund/tests/res/contractC1.res b/contrib/refund/tests/res/contractC1.res
new file mode 100644 (file)
index 0000000..42f11ed
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "C100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "95.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-13",
+               "montant": "180.0$"
+       }, {
+               "soin": 399,
+               "date": "2015-01-23",
+               "montant": "360.0$"
+       }],
+       "total": "635.0$"
+}
diff --git a/contrib/refund/tests/res/contractC2.res b/contrib/refund/tests/res/contractC2.res
new file mode 100644 (file)
index 0000000..1f8f2bf
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "dossier": "C100323",
+       "mois": "2015-01",
+       "remboursements": [],
+       "total": "0.0$"
+}
diff --git a/contrib/refund/tests/res/contractC3.res b/contrib/refund/tests/res/contractC3.res
new file mode 100644 (file)
index 0000000..8c4a0a6
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "C100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "170.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "180.0$"
+       }],
+       "total": "350.0$"
+}
diff --git a/contrib/refund/tests/res/contractD1.res b/contrib/refund/tests/res/contractD1.res
new file mode 100644 (file)
index 0000000..b69ed8c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "75.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-13",
+               "montant": "900.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "100.0$"
+       }],
+       "total": "1075.0$"
+}
diff --git a/contrib/refund/tests/res/contractD2.res b/contrib/refund/tests/res/contractD2.res
new file mode 100644 (file)
index 0000000..2520f7f
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "69.0$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "65.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "100.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "0.0$"
+       }],
+       "total": "234.0$"
+}
diff --git a/contrib/refund/tests/res/contractD3.res b/contrib/refund/tests/res/contractD3.res
new file mode 100644 (file)
index 0000000..2d00ee8
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "69.0$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "65.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "100.0$"
+       }],
+       "total": "234.0$"
+}
diff --git a/contrib/refund/tests/res/contractD4.res b/contrib/refund/tests/res/contractD4.res
new file mode 100644 (file)
index 0000000..9f26bfe
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "150.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "190.0$"
+       }],
+       "total": "340.0$"
+}
diff --git a/contrib/refund/tests/res/contractE1.res b/contrib/refund/tests/res/contractE1.res
new file mode 100644 (file)
index 0000000..2f9d9c3
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "58.50$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-13",
+               "montant": "540.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "15.0$"
+       }],
+       "total": "613.50$"
+}
diff --git a/contrib/refund/tests/res/contractE2.res b/contrib/refund/tests/res/contractE2.res
new file mode 100644 (file)
index 0000000..5bb6f4d
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "8.27$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "15.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "60.0$"
+       }],
+       "total": "83.27$"
+}
diff --git a/contrib/refund/tests/res/contractE3.res b/contrib/refund/tests/res/contractE3.res
new file mode 100644 (file)
index 0000000..f28adb2
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "8.27$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "15.0$"
+       }, {
+               "soin": 500,
+               "date": "2015-01-23",
+               "montant": "20.0$"
+       }],
+       "total": "43.27$"
+}
diff --git a/contrib/refund/tests/res/contractE4.res b/contrib/refund/tests/res/contractE4.res
new file mode 100644 (file)
index 0000000..961ec12
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "30.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "20.0$"
+       }],
+       "total": "50.0$"
+}
diff --git a/contrib/refund/tests/res/contract_error1.res b/contrib/refund/tests/res/contract_error1.res
new file mode 100644 (file)
index 0000000..dd8b5e7
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got 1)"
+}
diff --git a/contrib/refund/tests/res/contract_error2.res b/contrib/refund/tests/res/contract_error2.res
new file mode 100644 (file)
index 0000000..c6b464a
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got a)"
+}
diff --git a/contrib/refund/tests/res/contract_error3.res b/contrib/refund/tests/res/contract_error3.res
new file mode 100644 (file)
index 0000000..c009811
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got Z)"
+}
diff --git a/contrib/refund/tests/res/contract_error4.res b/contrib/refund/tests/res/contract_error4.res
new file mode 100644 (file)
index 0000000..dd8b5e7
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got 1)"
+}
diff --git a/contrib/refund/tests/res/dossier_error1.res b/contrib/refund/tests/res/dossier_error1.res
new file mode 100644 (file)
index 0000000..8af54e2
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key dossier)"
+}
diff --git a/contrib/refund/tests/res/json_error1.res b/contrib/refund/tests/res/json_error1.res
new file mode 100644 (file)
index 0000000..958aa8d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong input file (Unexpected Eof; is acceptable instead: value)"
+}
diff --git a/contrib/refund/tests/res/json_error2.res b/contrib/refund/tests/res/json_error2.res
new file mode 100644 (file)
index 0000000..9a451f7
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong input type (expected JsonObject got JsonArray)"
+}
diff --git a/contrib/refund/tests/res/json_error3.res b/contrib/refund/tests/res/json_error3.res
new file mode 100644 (file)
index 0000000..d35b982
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong input file (Unexpected Eof; is acceptable instead: members, pair)"
+}
diff --git a/contrib/refund/tests/res/month_error1.res b/contrib/refund/tests/res/month_error1.res
new file mode 100644 (file)
index 0000000..57810ce
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key mois)"
+}
diff --git a/contrib/refund/tests/res/month_error2.res b/contrib/refund/tests/res/month_error2.res
new file mode 100644 (file)
index 0000000..16557d6
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `mois` (expected String got Int)"
+}
diff --git a/contrib/refund/tests/res/month_error3.res b/contrib/refund/tests/res/month_error3.res
new file mode 100644 (file)
index 0000000..088b6fe
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `mois` (expected AAAA-MM got 2015\/01)"
+}
diff --git a/contrib/refund/tests/res/month_error4.res b/contrib/refund/tests/res/month_error4.res
new file mode 100644 (file)
index 0000000..a81529d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `mois` (expected AAAA-MM got 2015-23)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error1.res b/contrib/refund/tests/res/recl_date_error1.res
new file mode 100644 (file)
index 0000000..307401c
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key date)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error2.res b/contrib/refund/tests/res/recl_date_error2.res
new file mode 100644 (file)
index 0000000..5fee43f
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `date` (expected AAAA-MM-DD got 2015\/01\/11)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error3.res b/contrib/refund/tests/res/recl_date_error3.res
new file mode 100644 (file)
index 0000000..e8a33ce
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `mois` (expected AAAA-MM got 2015-13-32)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error4.res b/contrib/refund/tests/res/recl_date_error4.res
new file mode 100644 (file)
index 0000000..6e3f2ca
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong `mois` for `soin` with id `100`"
+}
diff --git a/contrib/refund/tests/res/recl_error1.res b/contrib/refund/tests/res/recl_error1.res
new file mode 100644 (file)
index 0000000..c4e34c8
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key reclamations)"
+}
diff --git a/contrib/refund/tests/res/recl_error2.res b/contrib/refund/tests/res/recl_error2.res
new file mode 100644 (file)
index 0000000..5716df8
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `number` (expected JsonArray got JsonObject)"
+}
diff --git a/contrib/refund/tests/res/recl_error3.res b/contrib/refund/tests/res/recl_error3.res
new file mode 100644 (file)
index 0000000..e8f5c80
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `reclamations#0` (expected JsonObject got Int)"
+}
diff --git a/contrib/refund/tests/res/recl_error4.res b/contrib/refund/tests/res/recl_error4.res
new file mode 100644 (file)
index 0000000..74de465
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key soin)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error1.res b/contrib/refund/tests/res/recl_fees_error1.res
new file mode 100644 (file)
index 0000000..beebcee
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key montant)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error2.res b/contrib/refund/tests/res/recl_fees_error2.res
new file mode 100644 (file)
index 0000000..09232e5
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `montant` (expected XX.XX$ got ABCD)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error3.res b/contrib/refund/tests/res/recl_fees_error3.res
new file mode 100644 (file)
index 0000000..1679482
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `montant` (expected XX.XX$ got 234)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error4.res b/contrib/refund/tests/res/recl_fees_error4.res
new file mode 100644 (file)
index 0000000..1ee1660
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `montant` (expected XX.XX$ got 234.00)"
+}
diff --git a/contrib/refund/tests/res/recl_soin_error1.res b/contrib/refund/tests/res/recl_soin_error1.res
new file mode 100644 (file)
index 0000000..74de465
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key soin)"
+}
diff --git a/contrib/refund/tests/res/recl_soin_error2.res b/contrib/refund/tests/res/recl_soin_error2.res
new file mode 100644 (file)
index 0000000..c2a092d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `soin` (expected Int got FlatString)"
+}
diff --git a/contrib/refund/tests/res/recl_soin_error3.res b/contrib/refund/tests/res/recl_soin_error3.res
new file mode 100644 (file)
index 0000000..3f38e32
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Unknown `soin` with id `900`"
+}
diff --git a/contrib/refund/tests/tests.sh b/contrib/refund/tests/tests.sh
new file mode 100755 (executable)
index 0000000..9ebf63f
--- /dev/null
@@ -0,0 +1,85 @@
+#!/bin/bash
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+BIN=../bin
+OUT=out
+RES=res
+
+# Execute test with name $1.
+run_test()
+{
+       local test="$1"
+       $BIN/refund $test.json $OUT/$test.res > $OUT/$test.out 2> $OUT/$test.err
+       diff $OUT/$test.res $RES/$test.res > $OUT/$test.diff 2> /dev/null
+}
+
+# Return
+#  0 if the sav not exists
+#  1 if the file does match
+#  2 if the file does not match
+check_result() {
+       local test="$1"
+
+       if [ ! -r "$RES/$test.res" ]; then
+               return 0
+       elif [ ! -s $OUT/$test.diff ]; then
+               return 1
+       else
+               return 2
+       fi
+}
+
+echo "Testing..."
+echo ""
+
+rm -rf $OUT 2>/dev/null
+mkdir $OUT 2>/dev/null
+
+all=0
+ok=0
+ko=0
+sk=0
+
+for file in `ls *.json`; do
+       ((all++))
+       test="${file%.*}"
+       echo -n "* $test: "
+
+       run_test $test
+       check_result $test
+
+       case "$?" in
+               0)
+                       echo "skip ($test.res not found)"
+                       ((sk++))
+                       continue;;
+               1)
+                       echo "success"
+                       ((ok++))
+                       ;;
+               2)
+                       echo "error (diff $OUT/$test.res $RES/$test.res)"
+                       ((ko++))
+                       ;;
+       esac
+done
+
+# clear tmp stats file.
+rm stats.json
+
+echo ""
+echo "==> success $ok/$all ($ko tests failed, $sk skipped)"
index 6f9a0a3..dd66960 100644 (file)
@@ -1,8 +1,7 @@
 all:
        mkdir -p bin/
 
-       # Compile in global mode to silence warnings on unused GTK deprecated
-       ../../bin/nitc --global --dir bin/ src/calculator_gtk.nit src/calculator_test.nit
+       ../../bin/nitc --dir bin/ src/calculator_gtk.nit src/calculator_test.nit
 
 android:
        mkdir -p bin/ res/
index bd01986..7586230 100644 (file)
@@ -55,10 +55,11 @@ class CalculatorGui
        do
                init_gtk
 
-               win = new GtkWindow(0)
+               win = new GtkWindow(new GtkWindowType.toplevel)
+               win.connect_destroy_signal_to_quit
 
-               container = new GtkGrid(5, 5, true)
-               win.add(container)
+               container = new GtkGrid
+               win.add container
 
                lbl_disp = new GtkLabel("_")
                container.attach(lbl_disp, 0, 0, 5, 1)
diff --git a/examples/langannot.nit b/examples/langannot.nit
new file mode 100644 (file)
index 0000000..cd294e1
--- /dev/null
@@ -0,0 +1,43 @@
+# 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.
+
+# Sample module showing the use of the i18n annotation
+module langannot is i18n
+
+import gettext
+
+class X
+       fun foo: String do
+               return "This String is a test"
+       end
+end
+
+var t = new X
+print t.foo
+
+print "This String is a test"
+
+print """Multiline string
+
+example
+
+
+of the language annotation capacities
+"""
+
+var s = "example"
+
+print "This superstring {s} rocks"
+
+print "This superstring %1 rocks".format(s)
diff --git a/examples/languages/en/LC_MESSAGES/langannot.po b/examples/languages/en/LC_MESSAGES/langannot.po
new file mode 100644 (file)
index 0000000..a3bd0f7
--- /dev/null
@@ -0,0 +1,17 @@
+#: langannot::langannot 22--10:32, langannot::langannot 29--7:29
+msgid "This String is a test"
+msgstr "This String is a test"
+
+#: langannot::langannot 31--7:3
+msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
+msgstr "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
+
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr "example"
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr "This superstring %1 rocks"
+
+# Generated file, do not modify
diff --git a/examples/languages/fr/LC_MESSAGES/langannot.po b/examples/languages/fr/LC_MESSAGES/langannot.po
new file mode 100644 (file)
index 0000000..0fbd368
--- /dev/null
@@ -0,0 +1,17 @@
+#: langannot::langannot 22--10:32, langannot::langannot 29--7:29
+msgid "This String is a test"
+msgstr "Cette chaîne de caractères est un test"
+
+#: langannot::langannot 31--7:3
+msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
+msgstr "Example de\n\nchaine multiligne\n\n\navec annotation de localisation\n"
+
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr "exemple"
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr "Cet %1 de superstring est génial"
+
+# Generated file, do not modify
diff --git a/examples/languages/ja/LC_MESSAGES/langannot.po b/examples/languages/ja/LC_MESSAGES/langannot.po
new file mode 100644 (file)
index 0000000..8cdb8e4
--- /dev/null
@@ -0,0 +1,17 @@
+#: langannot::langannot 22--10:32, langannot::langannot 29--7:29
+msgid "This String is a test"
+msgstr "この文字列はてストです"
+
+#: langannot::langannot 31--7:3
+msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
+msgstr "複数行の文字列\n\nなサンプルプログラム\n\n\n新しい国際化アノテーションとともに\n"
+
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr "サンプル"
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr "このスパ文字列%1は驚くべきです"
+
+# Generated file, do not modify
diff --git a/examples/languages/langannot.pot b/examples/languages/langannot.pot
new file mode 100644 (file)
index 0000000..9c86286
--- /dev/null
@@ -0,0 +1,17 @@
+#: langannot::langannot 22--10:32, langannot::langannot 29--7:29
+msgid "This String is a test"
+msgstr ""
+
+#: langannot::langannot 31--7:3
+msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
+msgstr ""
+
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr ""
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr ""
+
+# Generated file, do not modify
index 3265258..90af8a2 100644 (file)
@@ -32,14 +32,14 @@ redef class App
 
        fun test_intent
        do
-               intent = new Intent(self)
+               intent = new Intent
                intent.action = intent_action.view.to_s
                intent.data   = "content://contacts/people/"
 
-               intent.launch_activity
+               start_activity intent
                intent.destroy
 
-               intent = new Intent(self)
+               intent = new Intent
                var p1 = new Point(10, 20)
                intent["a_point"] = p1
                var p2 = intent["a_point"]
diff --git a/examples/rosettacode/balanced_brackets.nit b/examples/rosettacode/balanced_brackets.nit
new file mode 100644 (file)
index 0000000..a1ae476
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Balanced brackets
+# SEE: <http://rosettacode.org/wiki/Balanced_brackets>
+module balanced_brackets
+
+# Are `[` and `]` balanced?
+# Other characters are ignored.
+#
+#     assert is_balanced("[][[]]")
+#     assert is_balanced("")
+#     assert not is_balanced("[[]")
+#     assert not is_balanced("][][")
+fun is_balanced(s: String): Bool
+do
+       var l = 0
+       for x in s.chars do
+               if x == '[' then
+                       l += 1
+               else if x == ']' then
+                       l -= 1
+                       if l < 0 then return false
+               end
+       end
+       return l == 0
+end
+
+var n = 3
+if args.not_empty then n = args.first.to_i
+
+for i in [0..10[ do
+       var a = (['[', ']'] * n)
+       a.shuffle
+       var b = a.join("")
+       if is_balanced(b) then print "{b} is well-balanced" else print "{b} is not well-balanced"
+end
index 584b89b..6c6fb9b 100644 (file)
@@ -24,7 +24,7 @@ import platform
 import native_app_glue
 import dalvik
 private import log
-private import android_data_store
+private import data_store
 
 # Uses Android logs to print everything
 redef fun print(text) do log_write(priority_info, app.log_prefix.to_cstring, text.to_s.to_cstring)
similarity index 97%
rename from lib/android/android_data_store.nit
rename to lib/android/data_store.nit
index 57eb281..989b64c 100644 (file)
@@ -17,7 +17,7 @@
 # Implements `app::data_store` using `shared_preferences`
 #
 # We use the shared preferences named "data_store" to store the data.
-module android_data_store
+module data_store
 
 import app::data_store
 private import shared_preferences
index d2aa796..5f37179 100644 (file)
@@ -18,7 +18,7 @@
 # `android.content.Intent` for the android platform
 module intent_api10
 
-import native_app_glue
+import dalvik
 import android::bundle
 import serialization
 private import json_serialization
@@ -34,6 +34,8 @@ in "Java" `{
 extern class NativeIntent in "Java" `{ android.content.Intent `}
        super JavaObject
 
+       new in "Java" `{ return new Intent(); `}
+
        fun add_category(category: JavaString) in "Java" `{ recv.addCategory(category); `}
        fun add_flags(flags: Int) in "Java" `{ recv.addFlags((int)flags); `}
        fun filter_equals(other: NativeIntent): Bool in "Java" `{
@@ -626,23 +628,7 @@ end
 
 # Services allowing to launch an activity and start/stop services
 class Intent
-       protected var intent: NativeIntent
-       protected var context: NativeActivity
-
-       init (app: App)
-       do
-               self.context = app.native_activity
-               setup
-       end
-
-       private fun set_vars(intent: NativeIntent) do
-               self.intent = intent.new_global_ref
-       end
-
-       private fun setup import context, intent, set_vars in "Java" `{
-               Intent intent = new Intent();
-               Intent_set_vars(recv, intent);
-       `}
+       protected var intent: NativeIntent = (new NativeIntent).new_global_ref is lazy
 
        # The general action to be performed
        #
@@ -1311,14 +1297,6 @@ class Intent
                sys.jni_env.pop_local_frame
                return self
        end
-       # Execute the intent and launch the appropriate application
-       fun launch_activity do context.start_activity(intent)
-
-       # Start a service that will be running until the `stop_service` call
-       fun start_service do context.start_service(intent)
-
-       # Stop service
-       fun stop_service do context.stop_service(intent)
 
        # Deletes intent global reference
        fun destroy do self.intent.delete_global_ref
@@ -1328,9 +1306,9 @@ class Intent
 end
 
 redef extern class NativeActivity
-       fun start_activity(intent: NativeIntent) in "Java" `{ recv.startActivity(intent); `}
-       fun start_service(intent: NativeIntent) in "Java" `{ recv.startService(intent); `}
-       fun stop_service(intent: NativeIntent) in "Java" `{ recv.stopService(intent); `}
+       private fun start_activity(intent: NativeIntent) in "Java" `{ recv.startActivity(intent); `}
+       private fun start_service(intent: NativeIntent) in "Java" `{ recv.startService(intent); `}
+       private fun stop_service(intent: NativeIntent) in "Java" `{ recv.stopService(intent); `}
 end
 
 # Allows user to get values with enum-like syntax : `intent_action.main`
@@ -1349,3 +1327,15 @@ private class StringCopyHashSet
        var collection = new HashSet[String]
        fun add(element: JavaString) do collection.add element.to_s
 end
+
+redef class App
+
+       # Execute the intent and launch the appropriate application
+       fun start_activity(intent: Intent) do native_activity.start_activity(intent.intent)
+
+       # Start a service that will be running until the `stop_service` call
+       fun start_service(intent: Intent) do native_activity.start_service(intent.intent)
+
+       # Stop service
+       fun stop_service(intent: Intent) do native_activity.stop_service(intent.intent)
+end
index 6b6edde..72a634c 100644 (file)
@@ -17,7 +17,7 @@
 # Services to save/load data using `android.content.SharedPreferences` for the android platform
 module shared_preferences_api10
 
-import native_app_glue
+import dalvik
 import serialization
 private import json_serialization
 
index dd8e149..954a380 100644 (file)
@@ -17,7 +17,7 @@
 # Services to display a _toast_, a small popup on Android
 module toast
 
-import native_app_glue
+import dalvik
 
 in "Java" `{
        import android.widget.Toast;
@@ -34,7 +34,7 @@ redef class App
 
        private fun native_toast(message: JavaString, is_long: Bool)
        import native_activity in "Java" `{
-               final android.app.NativeActivity context = App_native_activity(recv);
+               final android.app.Activity context = App_native_activity(recv);
                final CharSequence final_message = message;
                final int duration = is_long? Toast.LENGTH_LONG: Toast.LENGTH_SHORT;
 
similarity index 61%
rename from lib/android/ui.nit
rename to lib/android/ui/native_ui.nit
index 6d0e0f8..bd008c1 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Views and services to use the Android native user interface
-#
-# Events, such as a button click, come from the UI thread and are then
-# passed to the main thread. It is recommended to specialize one of the
-# methods of the main thread to customize the response to a given event.
-#
-# This graph shows the path of a button click:
-# ~~~raw
-#     UI Thread     #   Main thread
-#
-#       User
-#        |
-#        V
-# Button::click_ui --> Button::click
-#                           |
-#                           V
-#                    App::catch_event
-# ~~~
-module ui is min_api_version 14
+# Native services from the `android.view` and `android.widget` namespaces
+module native_ui is min_api_version 14
 
 import nit_activity
-import pthreads::concurrent_collections
 
 in "Java" `{
        import android.app.Activity;
 
        import android.view.Gravity;
-       import android.view.MotionEvent;
+       import android.view.View;
        import android.view.ViewGroup;
        import android.view.ViewGroup.MarginLayoutParams;
 
@@ -55,31 +37,6 @@ in "Java" `{
        import java.util.*;
 `}
 
-# An event from the `app.nit` framework
-interface AppEvent
-       # Reaction to this event
-       fun react do end
-end
-
-# A control click event
-class ClickEvent
-       super AppEvent
-
-       # Sender of this event
-       var sender: Button
-
-       redef fun react do sender.click self
-end
-
-# Receiver of events not handled directly by the sender
-interface EventCatcher
-       fun catch_event(event: AppEvent) do end
-end
-
-redef class App
-       super EventCatcher
-end
-
 redef extern class NativeActivity
 
        # Set the main layout of this activity
@@ -98,107 +55,25 @@ redef extern class NativeActivity
        `}
 end
 
-# An `Object` that raises events
-abstract class Eventful
-       var event_catcher: EventCatcher = app is lazy, writable
-end
-
-#
-## Nity classes and services
-#
-
-# An Android control with text
-abstract class TextView
-       super Finalizable
-       super Eventful
-
-       # Native Java variant to this Nity class
-       type NATIVE: NativeTextView
-
-       # The native Java object encapsulated by `self`
-       var native: NATIVE is noinit
-
-       # Get the text of this view
-       fun text: String
-       do
-               var jstr = native.text
-               var str = jstr.to_s
-               jstr.delete_local_ref
-               return str
-       end
-
-       # Set the text of this view
-       fun text=(value: Text)
-       do
-               var jstr = value.to_s.to_java_string
-               native.text = jstr
-               jstr.delete_local_ref
-       end
-
-       # Get whether this view is enabled or not
-       fun enabled: Bool do return native.enabled
-
-       # Set if this view is enabled
-       fun enabled=(val: Bool) do native.enabled = val
-
-       # Set the size of the text in this view at `dpi`
-       fun text_size=(dpi: Numeric) do native.text_size = dpi.to_f
-
-       private var finalized = false
-       redef fun finalize
-       do
-               if not finalized then
-                       native.delete_global_ref
-                       finalized = true
-               end
-       end
-end
-
-# An Android button
-class Button
-       super TextView
-
-       redef type NATIVE: NativeButton
-
-       init
-       do
-               var native = new NativeButton(app.native_activity, self)
-               self.native = native.new_global_ref
-       end
-
-       # Click event
-       #
-       # By default, this method calls `app.catch_event`. It can be specialized
-       # with custom behavior or the receiver of `catch_event` can be changed
-       # with `event_catcher=`.
-       fun click(event: AppEvent) do event_catcher.catch_event(event)
-
-       private fun click_from_native do click(new ClickEvent(self))
-end
-
-# An Android editable text field
-class EditText
-       super TextView
-
-       redef type NATIVE: NativeEditText
-
-       init
-       do
-               var native = new NativeEditText(app.activities.first.native)
-               self.native = native.new_global_ref
-       end
-end
-
-#
-## Native classes
-#
-
 # A `View` for Android
 extern class NativeView in "Java" `{ android.view.View `}
        super JavaObject
 
        fun minimum_width=(val: Int) in "Java" `{ recv.setMinimumWidth((int)val); `}
        fun minimum_height=(val: Int) in "Java" `{ recv.setMinimumHeight((int)val); `}
+
+       fun enabled: Bool in "Java" `{ return recv.isEnabled(); `}
+       fun enabled=(value: Bool) in "Java" `{
+               final View final_recv = recv;
+               final boolean final_value = value;
+
+               ((Activity)recv.getContext()).runOnUiThread(new Runnable() {
+                       @Override
+                       public void run()  {
+                               final_recv.setEnabled(final_value);
+                       }
+               });
+       `}
 end
 
 # A collection of `NativeView`
@@ -206,6 +81,11 @@ extern class NativeViewGroup in "Java" `{ android.view.ViewGroup `}
        super NativeView
 
        fun add_view(view: NativeView) in "Java" `{ recv.addView(view); `}
+
+       fun add_view_with_weight(view: NativeView, weight: Float)
+       in "Java" `{
+               recv.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, (float)weight));
+       `}
 end
 
 # A `NativeViewGroup` organized in a line
@@ -224,11 +104,6 @@ extern class NativeLinearLayout in "Java" `{ android.widget.LinearLayout `}
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                recv.addView(view, params);
        `}
-
-       fun add_view_with_weight(view: NativeView, weight: Float)
-       in "Java" `{
-               recv.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, (float)weight));
-       `}
 end
 
 # A `NativeViewGroup` organized as a grid
@@ -278,23 +153,13 @@ extern class NativeTextView in "Java" `{ android.widget.TextView `}
                });
        `}
 
-       fun enabled: Bool in "Java" `{ return recv.isEnabled(); `}
-       fun enabled=(value: Bool) in "Java" `{
-               final TextView final_recv = recv;
-               final boolean final_value = value;
-
-               ((Activity)recv.getContext()).runOnUiThread(new Runnable() {
-                       @Override
-                       public void run()  {
-                               final_recv.setEnabled(final_value);
-                       }
-               });
-       `}
-
        fun gravity_center in "Java" `{
                recv.setGravity(Gravity.CENTER);
        `}
 
+       fun text_size: Float in "Java" `{
+               return recv.getTextSize();
+       `}
        fun text_size=(dpi: Float) in "Java" `{
                recv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, (float)dpi);
        `}
@@ -323,22 +188,6 @@ extern class NativeButton in "Java" `{ android.widget.Button `}
 
        redef type SELF: NativeButton
 
-       new (context: NativeActivity, sender_object: Object)
-       import Button.click_from_native in "Java" `{
-               final int final_sender_object = sender_object;
-
-               return new Button(context){
-                       @Override
-                       public boolean onTouchEvent(MotionEvent event) {
-                               if(event.getAction() == MotionEvent.ACTION_DOWN) {
-                                       Button_click_from_native(final_sender_object);
-                                       return true;
-                               }
-                               return false;
-                       }
-               };
-       `}
-
        redef fun new_global_ref: SELF import sys, Sys.jni_env `{
                Sys sys = NativeButton_sys(recv);
                JNIEnv *env = Sys_jni_env(sys);
diff --git a/lib/android/ui/ui.nit b/lib/android/ui/ui.nit
new file mode 100644 (file)
index 0000000..a37e572
--- /dev/null
@@ -0,0 +1,154 @@
+# This file is part of NIT (http://www.nitlanguage.org).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# 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.
+
+# Views and services to use the Android native user interface
+module ui
+
+import native_ui
+
+# An event from the `app.nit` framework
+interface AppEvent
+       # Reaction to this event
+       fun react do end
+end
+
+# A control click event
+class ClickEvent
+       super AppEvent
+
+       # Sender of this event
+       var sender: Button
+
+       redef fun react do sender.click self
+end
+
+# Receiver of events not handled directly by the sender
+interface EventCatcher
+       fun catch_event(event: AppEvent) do end
+end
+
+redef class App
+       super EventCatcher
+end
+
+# An `Object` that raises events
+abstract class Eventful
+       var event_catcher: EventCatcher = app is lazy, writable
+end
+
+#
+## Nity classes and services
+#
+
+# An Android control with text
+abstract class TextView
+       super Finalizable
+       super Eventful
+
+       # Native Java variant to this Nity class
+       type NATIVE: NativeTextView
+
+       # The native Java object encapsulated by `self`
+       var native: NATIVE is noinit
+
+       # Get the text of this view
+       fun text: String
+       do
+               var jstr = native.text
+               var str = jstr.to_s
+               jstr.delete_local_ref
+               return str
+       end
+
+       # Set the text of this view
+       fun text=(value: Text)
+       do
+               var jstr = value.to_s.to_java_string
+               native.text = jstr
+               jstr.delete_local_ref
+       end
+
+       # Get whether this view is enabled or not
+       fun enabled: Bool do return native.enabled
+
+       # Set if this view is enabled
+       fun enabled=(val: Bool) do native.enabled = val
+
+       # Set the size of the text in this view at `dpi`
+       fun text_size=(dpi: Numeric) do native.text_size = dpi.to_f
+
+       private var finalized = false
+       redef fun finalize
+       do
+               if not finalized then
+                       native.delete_global_ref
+                       finalized = true
+               end
+       end
+end
+
+# An Android button
+class Button
+       super TextView
+
+       redef type NATIVE: NativeButton
+
+       init
+       do
+               var native = new NativeButton(app.native_activity, self)
+               self.native = native.new_global_ref
+       end
+
+       # Click event
+       #
+       # By default, this method calls `app.catch_event`. It can be specialized
+       # with custom behavior or the receiver of `catch_event` can be changed
+       # with `event_catcher=`.
+       fun click(event: AppEvent) do event_catcher.catch_event(event)
+
+       private fun click_from_native do click(new ClickEvent(self))
+end
+
+# An Android editable text field
+class EditText
+       super TextView
+
+       redef type NATIVE: NativeEditText
+
+       init
+       do
+               var native = new NativeEditText(app.activities.first.native)
+               self.native = native.new_global_ref
+       end
+end
+
+redef class NativeButton
+       new (context: NativeActivity, sender_object: Object)
+       import Button.click_from_native in "Java" `{
+               final int final_sender_object = sender_object;
+
+               return new android.widget.Button(context){
+                       @Override
+                       public boolean onTouchEvent(android.view.MotionEvent event) {
+                               if(event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
+                                       Button_click_from_native(final_sender_object);
+                                       return true;
+                               }
+                               return false;
+                       }
+               };
+       `}
+end
index 79941dc..430e047 100644 (file)
@@ -21,7 +21,7 @@ module vibration is
        android_manifest("""<uses-permission android:name="android.permission.VIBRATE" />""")
 end
 
-import native_app_glue
+import dalvik
 
 # Handle to an Android vibrator
 extern class Vibrator in "Java" `{ android.os.Vibrator `}
index ae0d792..eba5d69 100644 (file)
@@ -48,20 +48,16 @@ class Buckets[G: Game]
        # Bucket type used in this implementation.
        type BUCKET: HashSet[Bucketable[G]]
 
-       private var buckets: Array[BUCKET] is noinit
-
        private var next_bucket: nullable BUCKET = null
        private var current_bucket_key: Int = -1
 
-       init
-       do
-               var n_buckets = 100
-               buckets = new Array[BUCKET].with_capacity(n_buckets)
+       # Number of `buckets`, default at 100
+       #
+       # Must be set prior to using any other methods of this class.
+       var n_buckets = 100
 
-               for b in [0 .. n_buckets [do
-                       buckets[b] = new HashSet[Bucketable[G]]
-               end
-       end
+       private var buckets: Array[BUCKET] =
+               [for b in n_buckets.times do new HashSet[Bucketable[G]]] is lazy
 
        # Add the Bucketable event `e` at `at_tick`.
        fun add_at(e: Bucketable[G], at_tick: Int)
index ae1b875..32bd967 100644 (file)
--- a/lib/c.nit
+++ b/lib/c.nit
@@ -153,6 +153,43 @@ extern class NativeCByteArray `{ unsigned char* `}
        redef fun +(offset) `{ return recv + offset; `}
 end
 
+# Wrapper around an array of `NativeString` in C (`char**`) with length and destroy state.
+class CNativeStringArray
+       super CArray[NativeString]
+
+       redef type NATIVE: NativeCStringArray
+
+       # Initialize a new NativeCStringArray of `size` elements.
+       init(size: Int) is old_style_init do
+               native_array = new NativeCStringArray(size)
+               super size
+       end
+
+       # Build from an `Array[NativeString]`
+       new from(array: Array[NativeString])
+       do
+               var carray = new CNativeStringArray(array.length)
+               for i in array.length.times do
+                       carray[i] = array[i]
+               end
+               return carray
+       end
+end
+
+# An array of `NativeString` in C (`char**`)
+extern class NativeCStringArray `{ char** `}
+       super NativeCArray
+
+       redef type E: NativeString
+
+       # Initialize a new NativeCStringArray of `size` elements.
+       new(size: Int) `{ return calloc(size, sizeof(char*)); `}
+
+       redef fun [](index) `{ return recv[index]; `}
+       redef fun []=(index, val) `{ recv[index] = val; `}
+       redef fun +(offset) `{ return recv + offset; `}
+end
+
 redef class NativeString
        super NativeCArray
        redef type E: Char
index 6545b73..6d5729d 100644 (file)
@@ -93,6 +93,22 @@ class Counter[E]
                for e in es do inc(e)
        end
 
+       # Decrement the value of `e` by 1
+       fun dec(e: E) do
+               if not has_key(e) then
+                       self.map[e] = 0
+               else
+                       self.map[e] = self[e] - 1
+                       sum += - 1
+               end
+       end
+
+       # Decrement the value for each element of `es`
+       fun dec_all(es: Collection[E])
+       do
+               for e in es do dec(e)
+       end
+
        # A new Counter initialized with `inc_all`.
        init from(es: Collection[E])
        do
diff --git a/lib/gettext.nit b/lib/gettext.nit
new file mode 100644 (file)
index 0000000..946a87c
--- /dev/null
@@ -0,0 +1,76 @@
+# 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.
+
+# Internationalization of Strings using `gettext` library
+module gettext is
+       new_annotation i18n
+end
+
+in "C" `{
+       #include <libintl.h>
+       #include <locale.h>
+`}
+
+redef class Sys
+       redef fun run do
+               "".to_cstring.set_locale
+               super
+       end
+end
+
+redef class NativeString
+       # Sets the locale of the program running
+       #
+       # This can be set at different times in the program,
+       # if used with an empty string, the locale will
+       # be set to the user's environment locale.
+       #
+       # For more info, SEE setlocale manual
+       fun set_locale `{
+               setlocale(LC_ALL, recv);
+       `}
+end
+
+redef class String
+       # Gets the translation of `self` via gettext from `dir` using `domain`
+       #
+       # `domain`: Gettext domain, i.e. file/module name
+       # `dir`: Where the locale/LC_MESSAGES folder for this domain is located
+       fun get_translation(domain, dir: String): String do
+               bindtextdomain(domain, dir)
+               return dgettext(domain)
+       end
+
+       # Gettext `gettext`, SEE gettext manual for further info
+       fun gettext: String
+       import String.to_cstring, NativeString.to_s `{
+               return NativeString_to_s(gettext(String_to_cstring(recv)));
+       `}
+
+       # Gettext `dgettext`, SEE gettext manual for further info
+       fun dgettext(domain: String): String
+       import String.to_cstring, NativeString.to_s `{
+               return NativeString_to_s(dgettext(String_to_cstring(domain), String_to_cstring(recv)));
+       `}
+end
+
+# Gettext `bindtextdomain`, SEE gettext manual for further info
+fun bindtextdomain(domain, dir: String) import String.to_cstring `{
+       bindtextdomain(String_to_cstring(domain), String_to_cstring(dir));
+`}
+
+# Gettext `textdomain`, SEE gettext manual for further info
+fun textdomain(domain: String) import String.to_cstring `{
+       textdomain(String_to_cstring(domain));
+`}
index ea516fa..6f7c7d9 100644 (file)
@@ -1016,6 +1016,12 @@ abstract class Comment
 
        # Comment body text.
        fun body: String do return json["body"].to_s
+
+       # Does the comment contain an acknowledgement (+1)
+       fun is_ack: Bool
+       do
+               return body.has("\\+1\\b".to_re) or body.has(":+1:") or body.has(":shipit:")
+       end
 end
 
 # A comment made on a commit.
index 11804ef..0969d86 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module gdk_enums is pkgconfig("gtk+-3.0")
+module gdk_enums is pkgconfig "gtk+-3.0"
 
 in "C Header" `{
        #include <gtk/gtk.h>
 `}
 
-#enum GdkGravity
-#Defines the reference point of a window and the meaning of coordinates passed to gtk_window_move().
-#@https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkGravity
+# enum GdkGravity
+# Defines the reference point of a window and the meaning of coordinates passed to gtk_window_move().
+# See: https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkGravity
 extern class GdkGravity `{GdkGravity`}
-       #The reference point is at the top left corner.
-       new north_west `{ return GDK_GRAVITY_NORTH_WEST; `} 
+       # The reference point is at the top left corner.
+       new north_west `{ return GDK_GRAVITY_NORTH_WEST; `}
 
-       #The reference point is in the middle of the top edge.  
-       new north `{ return GDK_GRAVITY_NORTH; `}       
+       # The reference point is in the middle of the top edge.
+       new north `{ return GDK_GRAVITY_NORTH; `}
 
-       #The reference point is at the top right corner.        
-       new north_east `{ return GDK_GRAVITY_NORTH_EAST; `} 
+       # The reference point is at the top right corner.
+       new north_east `{ return GDK_GRAVITY_NORTH_EAST; `}
 
-       #The reference point is at the middle of the left edge.
-       new west `{ return GDK_GRAVITY_WEST; `}         
+       # The reference point is at the middle of the left edge.
+       new west `{ return GDK_GRAVITY_WEST; `}
 
-       #The reference point is at the center of the window
-       new center `{ return GDK_GRAVITY_CENTER; `}     
+       # The reference point is at the center of the window
+       new center `{ return GDK_GRAVITY_CENTER; `}
 
-       #The reference point is at the middle of the right edge.
-       new east `{ return GDK_GRAVITY_EAST; `}         
+       # The reference point is at the middle of the right edge.
+       new east `{ return GDK_GRAVITY_EAST; `}
 
-       #The reference point is at the lower left corner.
-       new south_west `{ return GDK_GRAVITY_SOUTH_WEST; `} 
+       # The reference point is at the lower left corner.
+       new south_west `{ return GDK_GRAVITY_SOUTH_WEST; `}
 
-       #The reference point is at the middle of the lower edge.
-       new south `{ return GDK_GRAVITY_SOUTH; `} 
+       # The reference point is at the middle of the lower edge.
+       new south `{ return GDK_GRAVITY_SOUTH; `}
 
-       #The reference point is at the lower right corner.
-       new south_east `{ return GDK_GRAVITY_SOUTH_EAST; `} 
+       # The reference point is at the lower right corner.
+       new south_east `{ return GDK_GRAVITY_SOUTH_EAST; `}
 
-       #The reference point is at the top left corner of the window itself, ignoring window manager decorations.       
-       new static `{ return GDK_GRAVITY_STATIC; `} 
+       # The reference point is at the top left corner of the window itself, ignoring window manager decorations.
+       new static `{ return GDK_GRAVITY_STATIC; `}
 end
 
-#enum GdkGWindowEdge
-#Determines a window edge or corner.
-#@https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowEdge
+# enum GdkGWindowEdge
+# Determines a window edge or corner.
+# See: https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowEdge
 extern class GdkWindowEdge `{GdkWindowEdge`}
-       #The top left corner.
-       new north_west `{ return GDK_WINDOW_EDGE_NORTH_WEST; `} 
+       # The top left corner.
+       new north_west `{ return GDK_WINDOW_EDGE_NORTH_WEST; `}
 
-       #The top edge.  
-       new north `{ return GDK_WINDOW_EDGE_NORTH; `}   
+       # The top edge.
+       new north `{ return GDK_WINDOW_EDGE_NORTH; `}
 
-       #The top right corner.  
-       new north_east `{ return GDK_WINDOW_EDGE_NORTH_EAST; `} 
+       # The top right corner.
+       new north_east `{ return GDK_WINDOW_EDGE_NORTH_EAST; `}
 
-       #The left edge.
-       new west `{ return GDK_WINDOW_EDGE_WEST; `}             
+       # The left edge.
+       new west `{ return GDK_WINDOW_EDGE_WEST; `}
 
-       #The right edge.
-       new east `{ return GDK_WINDOW_EDGE_EAST; `}     
+       # The right edge.
+       new east `{ return GDK_WINDOW_EDGE_EAST; `}
 
-       #The lower left corner.
-       new south_west `{ return GDK_WINDOW_EDGE_SOUTH_WEST; `} 
+       # The lower left corner.
+       new south_west `{ return GDK_WINDOW_EDGE_SOUTH_WEST; `}
 
-       #The lower edge.
-       new south `{ return GDK_WINDOW_EDGE_SOUTH; `} 
+       # The lower edge.
+       new south `{ return GDK_WINDOW_EDGE_SOUTH; `}
 
-       #The lower right corner.
-       new south_east `{ return GDK_WINDOW_EDGE_SOUTH_EAST; `} 
+       # The lower right corner.
+       new south_east `{ return GDK_WINDOW_EDGE_SOUTH_EAST; `}
 end
 
index c36c521..2ceb2f4 100644 (file)
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module gtk_assistant is pkgconfig("gtk+-3.0")
+module gtk_assistant is pkgconfig "gtk+-3.0"
 
 import gtk_core
 
@@ -23,115 +23,115 @@ in "C Header" `{
        #include <gtk/gtk.h>
 `}
 
-#A widget used to guide users through multi-step operations
-#@https://developer.gnome.org/gtk3/stable/GtkAssistant.html
+# A widget used to guide users through multi-step operations
+# See: https://developer.gnome.org/gtk3/stable/GtkAssistant.html
 extern class GtkAssistant `{GtkAssistant *`}
        super GtkWindow
 
-       new is extern `{
-               return (GtkAssistant *)gtk_assistant_new( );
+       new `{
+               return (GtkAssistant *)gtk_assistant_new();
        `}
 
-       fun current_page : Int is extern `{
-               return gtk_assistant_get_current_page ( recv );
+       fun current_page: Int `{
+               return gtk_assistant_get_current_page (recv);
        `}
 
-       fun current_page=( page_num : Int ) is extern `{
-               gtk_assistant_set_current_page( recv, page_num);
+       fun current_page=(page_num: Int) `{
+               gtk_assistant_set_current_page(recv, page_num);
        `}
 
-       fun number_pages : Int is extern `{
-               return gtk_assistant_get_n_pages( recv );
+       fun number_pages: Int `{
+               return gtk_assistant_get_n_pages(recv);
        `}
 
-       fun get_page( page_num : Int ) : GtkWidget is extern `{
-               return gtk_assistant_get_nth_page( recv, page_num );
+       fun get_page(page_num: Int): GtkWidget `{
+               return gtk_assistant_get_nth_page(recv, page_num);
        `}
 
-       fun prepend( page : GtkWidget ) : Int is extern `{
-               return gtk_assistant_prepend_page( recv, page );
+       fun prepend(page: GtkWidget): Int `{
+               return gtk_assistant_prepend_page(recv, page);
        `}
 
-       fun append( page : GtkWidget ) : Int is extern `{
-               return gtk_assistant_append_page( recv, page );
+       fun append(page: GtkWidget): Int `{
+               return gtk_assistant_append_page(recv, page);
        `}
 
-       fun insert( page : GtkWidget, position : Int ) : Int is extern `{
-               return gtk_assistant_insert_page( recv, page, position );
+       fun insert(page: GtkWidget, position: Int): Int `{
+               return gtk_assistant_insert_page(recv, page, position);
        `}
 
-       fun remove( page_num : Int ) is extern `{
-               gtk_assistant_remove_page( recv, page_num );
+       fun remove(page_num: Int) `{
+               gtk_assistant_remove_page(recv, page_num);
        `}
 
-       fun get_page_type( page : GtkWidget ) : GtkAssistantPageType is extern `{
-               return gtk_assistant_get_page_type( recv, page );
+       fun get_page_type(page: GtkWidget): GtkAssistantPageType `{
+               return gtk_assistant_get_page_type(recv, page);
        `}
 
-       fun set_page_type( page : GtkWidget, t : GtkAssistantPageType) is extern `{
-               gtk_assistant_set_page_type( recv, page, t );
+       fun set_page_type(page: GtkWidget, t: GtkAssistantPageType) `{
+               gtk_assistant_set_page_type(recv, page, t);
        `}
 
-       fun get_page_title( page : GtkWidget ) : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_assistant_get_page_title( recv, page ) );
+       fun get_page_title(page: GtkWidget): String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_assistant_get_page_title(recv, page));
        `}
 
-       fun set_page_title( page : GtkWidget, title : String) is extern import String.to_cstring `{
-               gtk_assistant_set_page_title( recv, page, String_to_cstring( title ) );
+       fun set_page_title(page: GtkWidget, title: String) import String.to_cstring `{
+               gtk_assistant_set_page_title(recv, page, String_to_cstring(title));
        `}
 
-       fun set_page_complete( page : GtkWidget, is_complete : Bool ) is extern `{
-               gtk_assistant_set_page_complete( recv, page, is_complete );
+       fun set_page_complete(page: GtkWidget, is_complete: Bool) `{
+               gtk_assistant_set_page_complete(recv, page, is_complete);
        `}
 
-       fun get_page_complete( page : GtkWidget ) : Bool is extern `{
-               return gtk_assistant_get_page_complete( recv, page );
+       fun get_page_complete(page: GtkWidget): Bool `{
+               return gtk_assistant_get_page_complete(recv, page);
        `}
 
-       fun remove_action_widget( child : GtkWidget ) is extern `{
-               gtk_assistant_remove_action_widget( recv, child );
+       fun remove_action_widget(child: GtkWidget) `{
+               gtk_assistant_remove_action_widget(recv, child);
        `}
 
-       fun add_action_widget( child : GtkWidget ) is extern `{
-               gtk_assistant_add_action_widget( recv, child );
+       fun add_action_widget(child: GtkWidget) `{
+               gtk_assistant_add_action_widget(recv, child);
        `}
 
-       fun update_buttons_state is extern `{
-               gtk_assistant_update_buttons_state( recv );
+       fun update_buttons_state `{
+               gtk_assistant_update_buttons_state(recv);
        `}
 
-       fun commit is extern `{
-               gtk_assistant_commit( recv );
+       fun commit `{
+               gtk_assistant_commit(recv);
        `}
 
-       fun next_page is extern `{
-               gtk_assistant_next_page( recv );
+       fun next_page `{
+               gtk_assistant_next_page(recv);
        `}
 
-       fun previous_page is extern `{
-               gtk_assistant_previous_page( recv );
+       fun previous_page `{
+               gtk_assistant_previous_page(recv);
        `}
 end
 
-#enum GtkAssistantPageType
-#An enum for determining the page role inside the GtkAssistant. It's used to handle buttons sensitivity and visibility.
-#@https://developer.gnome.org/gtk3/stable/GtkAssistant.html#GtkAssistantPageType
+# enum GtkAssistantPageType
+# An enum for determining the page role inside the GtkAssistant. It's used to handle buttons sensitivity and visibility.
+# See: https://developer.gnome.org/gtk3/stable/GtkAssistant.html#GtkAssistantPageType
 extern class GtkAssistantPageType `{GtkAssistantPageType`}
-       #The page has regular contents. Both the Back and forward buttons will be shown.
+       # The page has regular contents. Both the Back and forward buttons will be shown.
        new content `{ return GTK_ASSISTANT_PAGE_CONTENT; `}
 
-       #The page contains an introduction to the assistant task. Only the Forward button will be shown if there is a next page.
+       # The page contains an introduction to the assistant task. Only the Forward button will be shown if there is a next page.
        new intro `{ return GTK_ASSISTANT_PAGE_INTRO; `}
 
-       #The page lets the user confirm or deny the changes. The Back and Apply buttons will be shown.
+       # The page lets the user confirm or deny the changes. The Back and Apply buttons will be shown.
        new confirm `{ return GTK_ASSISTANT_PAGE_CONFIRM; `}
 
-       #The page informs the user of the changes done. Only the Close button will be shown.
+       # The page informs the user of the changes done. Only the Close button will be shown.
        new summary `{ return GTK_ASSISTANT_PAGE_SUMMARY; `}
 
-       #Used for tasks that take a long time to complete, blocks the assistant until the page is marked as complete. Only the back button will be shown.
+       # Used for tasks that take a long time to complete, blocks the assistant until the page is marked as complete. Only the back button will be shown.
        new progress `{ return GTK_ASSISTANT_PAGE_PROGRESS; `}
 
-       #Used for when other page types are not appropriate. No buttons will be shown, and the application must add its own buttons through gtk_assistant_add_action_widget().
+       # Used for when other page types are not appropriate. No buttons will be shown, and the application must add its own buttons through gtk_assistant_add_action_widget().
        new custom `{ return GTK_ASSISTANT_PAGE_CUSTOM; `}
 end
index 64b7b49..88842a4 100644 (file)
 # limitations under the License.
 
 # Classes and services to use libGTK widgets
-module gtk_core is pkgconfig("gtk+-3.0")
+module gtk_core is
+       pkgconfig "gtk+-3.0"
+       cflags "-Wno-deprecated-declarations"
+end
 
 import gtk_enums
 import gdk_enums
@@ -26,94 +29,95 @@ in "C Header" `{
 `}
 
 `{
-               /* callback user data */
-               typedef struct {
-                       GtkCallable to_call;
-                       nullable_Object user_data;
-               } NitGtkSignal;
-
-               void nit_gtk_callback_func( GtkWidget *widget,
-                                                       gpointer   callback_data ) {
-                       NitGtkSignal *data;
-                       data = (NitGtkSignal*)callback_data;
-                       GtkCallable_signal( data->to_call, widget, data->user_data );
-               }
+       /* callback user data */
+       typedef struct {
+               GtkCallable to_call;
+               nullable_Object user_data;
+       } NitGtkSignal;
+
+       void nit_gtk_callback_func(GtkWidget *widget, gpointer callback_data) {
+               NitGtkSignal *data;
+               data = (NitGtkSignal*)callback_data;
+               GtkCallable_signal(data->to_call, widget, data->user_data);
+       }
 `}
 
-redef interface Object
-       protected fun init_gtk `{ gtk_init( 0, NULL ); `}
-       protected fun run_gtk `{ gtk_main(); `}
-       protected fun quit_gtk `{ gtk_main_quit(); `}
-end
+# Initialize the GTK system
+fun init_gtk `{ gtk_init(0, NULL); `}
+
+# Hand over control to the GTK event loop
+fun run_gtk `{ gtk_main(); `}
+
+# Quit the GTK event loop and clean up the system
+fun quit_gtk `{ gtk_main_quit(); `}
 
 interface GtkCallable
        # return true to stop event processing, false to let it propagate
-       fun signal( sender : GtkWidget, user_data : nullable Object ) is abstract
+       fun signal(sender: GtkWidget, user_data: nullable Object) is abstract
 end
 
 extern class GdkEvent `{GdkEvent *`}
 end
 
-
-#Base class for all widgets
-#@https://developer.gnome.org/gtk3/stable/GtkWidget.html
+# Base class for all widgets
+# See: https://developer.gnome.org/gtk3/stable/GtkWidget.html
 extern class GtkWidget `{GtkWidget *`}
-       fun show_all is extern `{ gtk_widget_show_all( recv ); `}
+       fun show_all `{ gtk_widget_show_all(recv); `}
 
-       fun signal_connect( signal_name : String, to_call : GtkCallable, user_data : nullable Object ) is extern import String.to_cstring, GtkCallable.signal, Object.as not nullable `{
-               NitGtkSignal *data = malloc( sizeof(NitGtkSignal) );
+       fun signal_connect(signal_name: String, to_call: GtkCallable, user_data: nullable Object) import String.to_cstring, GtkCallable.signal, Object.as not nullable `{
+               NitGtkSignal *data = malloc(sizeof(NitGtkSignal));
 
-               GtkCallable_incr_ref( to_call );
-               Object_incr_ref( user_data );
+               GtkCallable_incr_ref(to_call);
+               Object_incr_ref(user_data);
 
                data->to_call = to_call;
                data->user_data = user_data;
 
                /*Use G_CALLBACK() to cast the callback function to a GCallback*/
-               g_signal_connect( recv,
-                                                       String_to_cstring( signal_name ),
-                                                       G_CALLBACK(nit_gtk_callback_func),
-                                                       data );
+               g_signal_connect(recv,
+                                String_to_cstring(signal_name),
+                                G_CALLBACK(nit_gtk_callback_func),
+                                data);
        `}
 
-       redef fun == ( o ) do return o isa GtkWidget and equal_to_gtk_widget( o )
+       redef fun ==(o) do return o isa GtkWidget and equal_to_gtk_widget(o)
 
-       private fun equal_to_gtk_widget( o : GtkWidget ) : Bool `{
+       private fun equal_to_gtk_widget(o: GtkWidget): Bool `{
                return recv == o;
        `}
 
-       fun request_size( width, height : Int ) `{
-               gtk_widget_set_size_request( recv, width, height );
+       fun request_size(width, height: Int) `{
+               gtk_widget_set_size_request(recv, width, height);
        `}
 
-       fun bg_color=( state : GtkStateType, color : GdkRGBA ) is extern `{
-               gtk_widget_override_background_color( recv, state, color);
+       fun bg_color=(state: GtkStateType, color: GdkRGBA) `{
+               gtk_widget_override_background_color(recv, state, color);
        `}
 
-       #with gtk it's possible to set fg_color to all widget : is it correct? is fg color inherited?
-       #GdkColor color;
-       fun fg_color=( state : GtkStateType, color : GdkRGBA ) is extern `{
-               gtk_widget_override_color( recv, state, color);
+       # with gtk it's possible to set fg_color to all widget: is it correct? is fg color inherited?
+       # GdkColor color;
+       fun fg_color=(state: GtkStateType, color: GdkRGBA) `{
+               gtk_widget_override_color(recv, state, color);
        `}
-       
+
        # Sets the sensitivity of a widget. sensitive -> the user can interact with it.
        # Insensitive -> widget "grayed out" and the user can"t interact with them
-       fun sensitive=(sensitive : Bool) is extern `{
+       fun sensitive=(sensitive: Bool) `{
                gtk_widget_set_sensitive(recv, sensitive);
        `}
-       
+
        # return the sensitivity of the widget
-       fun sensitive: Bool is extern `{
+       fun sensitive: Bool `{
                return gtk_widget_get_sensitive(recv);
        `}
-       
+
        # Set the visibility of the widget
-       fun visible=(visible: Bool) is extern `{
+       fun visible=(visible: Bool) `{
                gtk_widget_set_visible(recv, visible);
        `}
 
        # Get the visibility of the widget only
-       fun visible_self: Bool is extern `{
+       fun visible_self: Bool `{
                return gtk_widget_get_visible(recv);
        `}
 
@@ -129,539 +133,578 @@ extern class GtkWidget `{GtkWidget *`}
        fun hide `{ gtk_widget_hide(recv); `}
 end
 
-#Base class for widgets which contain other widgets
-#@https://developer.gnome.org/gtk3/stable/GtkContainer.html
+# Base class for widgets which contain other widgets
+# See: https://developer.gnome.org/gtk3/stable/GtkContainer.html
 extern class GtkContainer `{GtkContainer *`}
        super GtkWidget
 
        # Add a widget to the container
-       fun add( widget : GtkWidget ) is extern `{
-               gtk_container_add( recv, widget );
+       fun add(widget: GtkWidget) `{
+               gtk_container_add(recv, widget);
        `}
        # Remove the widget from the container
-       fun remove_widget( widget : GtkWidget ) is extern `{
-               gtk_container_remove( recv, widget );
+       fun remove_widget(widget: GtkWidget) `{
+               gtk_container_remove(recv, widget);
        `}
 
        # Get the resize mode of the container
-       fun resize_mode : GtkResizeMode is extern `{
-               return gtk_container_get_resize_mode( recv );
+       fun resize_mode: GtkResizeMode `{
+               return gtk_container_get_resize_mode(recv);
        `}
 
        # Set the resize mode of the container
-       fun resize_mode=( resize_mode: GtkResizeMode ) is extern `{
-               gtk_container_set_resize_mode( recv, resize_mode );
+       fun resize_mode=(resize_mode: GtkResizeMode) `{
+               gtk_container_set_resize_mode(recv, resize_mode);
        `}
 
 end
 
-#A container with just one child
-#@https://developer.gnome.org/gtk3/stable/GtkBin.html
+# A container with just one child
+# See: https://developer.gnome.org/gtk3/stable/GtkBin.html
 extern class GtkBin `{GtkBin *`}
        super GtkContainer
 
-       fun child : GtkWidget is extern `{
-               return gtk_bin_get_child( recv );
+       fun child: GtkWidget `{
+               return gtk_bin_get_child(recv);
        `}
 end
 
-#Toplevel which can contain other widgets
-#@https://developer.gnome.org/gtk3/stable/GtkWindow.html
+# Toplevel which can contain other widgets
+# See: https://developer.gnome.org/gtk3/stable/GtkWindow.html
 extern class GtkWindow `{GtkWindow *`}
        super GtkBin
 
-       new ( flag : Int ) is extern `{
-               GtkWindow *win;
+       new (typ: GtkWindowType) `{
+               return (GtkWindow *)gtk_window_new(typ);
+       `}
 
-               win = GTK_WINDOW(gtk_window_new( flag ));
-               g_signal_connect(win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
-               return win;
+       # Connect the "destroy" signal to `quit_gtk`
+       fun connect_destroy_signal_to_quit `{
+               g_signal_connect(recv, "destroy", G_CALLBACK(gtk_main_quit), NULL);
        `}
 
-       fun title=( title : String ) is extern import String.to_cstring `{
-               gtk_window_set_title( recv, String_to_cstring( title ) );
+       fun title=(title: String) import String.to_cstring `{
+               gtk_window_set_title(recv, String_to_cstring(title));
        `}
 
-       #The "destroy" signal is emitted when a widget is destroyed, either by explicitly calling gtk_widget_destroy() or when the widget is unparented. Top-level GtkWindows are also destroyed when the Close window control button is clicked.
-       fun on_close( to_call : GtkCallable, user_data : nullable Object )
+       # The "destroy" signal is emitted when a widget is destroyed, either by explicitly calling gtk_widget_destroy() or when the widget is unparented. Top-level GtkWindows are also destroyed when the Close window control button is clicked.
+       fun on_close(to_call: GtkCallable, user_data: nullable Object)
        do
-               signal_connect( "destroy", to_call, user_data )
+               signal_connect("destroy", to_call, user_data)
        end
 
-       fun resizable : Bool is extern `{
-               return gtk_window_get_resizable( recv );
+       fun resizable: Bool `{
+               return gtk_window_get_resizable(recv);
        `}
 
-       fun resizable=( is_resizable : Bool) is extern `{
-               return gtk_window_set_resizable( recv, is_resizable );
+       fun resizable=(is_resizable: Bool) `{
+               return gtk_window_set_resizable(recv, is_resizable);
        `}
 
-       #Activates the current focused widget within the window.
-       #returns TRUE if a widget got activated.
-       fun activate_focus : Bool is extern `{
-               return gtk_window_activate_focus( recv );
+       # Activates the current focused widget within the window.
+       # returns TRUE if a widget got activated.
+       fun activate_focus: Bool `{
+               return gtk_window_activate_focus(recv);
        `}
 
-       #Sets a window modal or non-modal. Modal windows prevent interaction with other windows in the same application.
-       fun modal=( is_modal : Bool ) is extern `{
-               gtk_window_set_modal( recv, is_modal );
+       # Sets a window modal or non-modal. Modal windows prevent interaction with other windows in the same application.
+       fun modal=(is_modal: Bool) `{
+               gtk_window_set_modal(recv, is_modal);
        `}
 
-       #Windows can't actually be 0x0 in size, they must be at least 1x1
-       #but passing 0 for width and height is OK, resulting in a 1x1 default size.
-       #params width in pixels, or -1 to unset the default width
-       #params height in pixels, or -1 to unset the default height
-       fun default_size( width : Int, height : Int ) is extern `{
-               gtk_window_set_default_size( recv, width, height );
+       # Windows can't actually be 0x0 in size, they must be at least 1x1
+       # but passing 0 for width and height is OK, resulting in a 1x1 default size.
+       # params width in pixels, or -1 to unset the default width
+       # params height in pixels, or -1 to unset the default height
+       fun default_size(width: Int, height: Int) `{
+               gtk_window_set_default_size(recv, width, height);
        `}
 
-       #Activates the default widget for the window
-       #unless the current focused widget has been configured to receive the default action (see gtk_widget_set_receives_default()), in which case the focused widget is activated.
-       fun activate_default : Bool is extern `{
-               return gtk_window_activate_default( recv );
+       # Activates the default widget for the window
+       # unless the current focused widget has been configured to receive the default action (see gtk_widget_set_receives_default()), in which case the focused widget is activated.
+       fun activate_default: Bool `{
+               return gtk_window_activate_default(recv);
        `}
 
-       fun gravity : GdkGravity is extern `{
-               return gtk_window_get_gravity( recv );
+       fun gravity: GdkGravity `{
+               return gtk_window_get_gravity(recv);
        `}
 
-       fun gravity=( window_grav : GdkGravity ) is extern `{
-               gtk_window_set_gravity( recv, window_grav );
+       fun gravity=(window_grav: GdkGravity) `{
+               gtk_window_set_gravity(recv, window_grav);
        `}
 
-#      fun position : GtkWindowPosition is extern `{
-#              return gtk_window_get_position( recv );
+#      fun position: GtkWindowPosition `{
+#              return gtk_window_get_position(recv);
 #      `}
 #
-#      fun position=( window_pos : GtkWindowPosition ) is extern `{
-#              gtk_window_set_position( recv, window_pos );
+#      fun position=(window_pos: GtkWindowPosition) `{
+#              gtk_window_set_position(recv, window_pos);
 #      `}
 
-       fun active : Bool is extern `{
-               return gtk_window_is_active( recv );
+       fun active: Bool `{
+               return gtk_window_is_active(recv);
        `}
 
-       #Returns whether the input focus is within this GtkWindow. For real toplevel windows, this is identical to gtk_window_is_active(), but for embedded windows, like GtkPlug, the results will differ.
-       fun has_toplevel_focus : Bool is extern `{
-               return gtk_window_has_toplevel_focus( recv );
+       # Returns whether the input focus is within this GtkWindow. For real toplevel windows, this is identical to gtk_window_is_active(), but for embedded windows, like GtkPlug, the results will differ.
+       fun has_toplevel_focus: Bool `{
+               return gtk_window_has_toplevel_focus(recv);
        `}
 
-       fun get_focus : GtkWidget is extern `{
-               return gtk_window_get_focus( recv );
+       fun get_focus: GtkWidget `{
+               return gtk_window_get_focus(recv);
        `}
 
-       fun set_focus( widget : GtkWidget ) is extern `{
-               return gtk_window_set_focus( recv, widget );
+       fun set_focus(widget: GtkWidget) `{
+               return gtk_window_set_focus(recv, widget);
        `}
 
-       fun get_default_widget : GtkWidget is extern `{
-               return gtk_window_get_default_widget( recv );
+       fun get_default_widget: GtkWidget `{
+               return gtk_window_get_default_widget(recv);
        `}
 
-       fun set_default_widget( widget : GtkWidget ) is extern `{
-               return gtk_window_set_default( recv, widget );
+       fun set_default_widget(widget: GtkWidget) `{
+               return gtk_window_set_default(recv, widget);
        `}
 
-       fun maximize is extern `{
-               return gtk_window_maximize( recv );
+       fun maximize `{
+               return gtk_window_maximize(recv);
        `}
 
-       fun unmaximize is extern `{
-               return gtk_window_unmaximize( recv );
+       fun unmaximize `{
+               return gtk_window_unmaximize(recv);
        `}
 
-       fun fullscreen is extern `{
-               return gtk_window_fullscreen( recv );
+       fun fullscreen `{
+               return gtk_window_fullscreen(recv);
        `}
 
-       fun unfullscreen is extern `{
-               return gtk_window_unfullscreen( recv );
+       fun unfullscreen `{
+               return gtk_window_unfullscreen(recv);
        `}
 
-       fun keep_above=( setting : Bool ) is extern `{
-               gtk_window_set_keep_above( recv, setting );
+       fun keep_above=(setting: Bool) `{
+               gtk_window_set_keep_above(recv, setting);
        `}
 
-       fun keep_below=( setting : Bool ) is extern `{
-               gtk_window_set_keep_below( recv, setting );
+       fun keep_below=(setting: Bool) `{
+               gtk_window_set_keep_below(recv, setting);
        `}
 end
 
-#A bin with a decorative frame and optional label
-#https://developer.gnome.org/gtk3/stable/GtkFrame.html
+# A bin with a decorative frame and optional label
+# https://developer.gnome.org/gtk3/stable/GtkFrame.html
 extern class GtkFrame `{GtkFrame *`}
        super GtkBin
 
-       new ( lbl : String ) is extern import String.to_cstring`{
-               return (GtkFrame *)gtk_frame_new( String_to_cstring( lbl ) );
+       new (lbl: String) import String.to_cstring `{
+               return (GtkFrame *)gtk_frame_new(String_to_cstring(lbl));
        `}
 
-       fun frame_label : String is extern`{
-               return NativeString_to_s( (char *)gtk_frame_get_label( recv ) );
+       fun frame_label: String `{
+               return NativeString_to_s((char *)gtk_frame_get_label(recv));
        `}
 
-       fun frame_label=( lbl : String ) is extern import String.to_cstring`{
-               gtk_frame_set_label( recv, String_to_cstring( lbl ) );
+       fun frame_label=(lbl: String) import String.to_cstring `{
+               gtk_frame_set_label(recv, String_to_cstring(lbl));
        `}
 
-       fun label_widget : GtkWidget is extern `{
-               return gtk_frame_get_label_widget( recv );
+       fun label_widget: GtkWidget `{
+               return gtk_frame_get_label_widget(recv);
        `}
 
-       fun label_widget=( widget : GtkWidget ) is extern `{
-               gtk_frame_set_label_widget( recv, widget );
+       fun label_widget=(widget: GtkWidget) `{
+               gtk_frame_set_label_widget(recv, widget);
        `}
 
-       fun shadow_type : GtkShadowType is extern `{
-               return gtk_frame_get_shadow_type( recv );
+       fun shadow_type: GtkShadowType `{
+               return gtk_frame_get_shadow_type(recv);
        `}
 
-       fun shadow_type=( stype : GtkShadowType ) is extern `{
-               gtk_frame_set_shadow_type( recv, stype );
+       fun shadow_type=(stype: GtkShadowType) `{
+               gtk_frame_set_shadow_type(recv, stype);
        `}
 
-       #fun label_align : GtkShadowType is extern `{
-       #`}
-
-       fun label_align=( xalign : Float, yalign : Float ) is extern `{
-               gtk_frame_set_label_align( recv, xalign, yalign );
+       fun label_align=(xalign: Float, yalign: Float) `{
+               gtk_frame_set_label_align(recv, xalign, yalign);
        `}
 end
 
-#Pack widgets in a rows and columns
-#@https://developer.gnome.org/gtk3/3.3/GtkGrid.html
+# Pack widgets in a rows and columns
+# See: https://developer.gnome.org/gtk3/3.3/GtkGrid.html
 extern class GtkGrid `{GtkGrid *`}
        super GtkContainer
 
-       # Create a grid with a fixed number of rows and columns
-       new ( rows : Int, columns : Int, homogeneous : Bool ) `{
-               return (GtkGrid*)gtk_grid_new(); // rows, columns, homogeneous );
+       # Create a new grid
+       new `{
+               return (GtkGrid*)gtk_grid_new();
        `}
 
        # Set a widget child inside the grid at a given position
-       fun attach( child : GtkWidget, left, top, width, height : Int ) `{
-               gtk_grid_attach( recv, child, left, top, width, height );
+       fun attach(child: GtkWidget, left, top, width, height: Int) `{
+               gtk_grid_attach(recv, child, left, top, width, height);
        `}
 
        # Get the child of the Grid at the given position
-       fun get_child_at( left : Int, top : Int ): GtkWidget is extern `{
-               return gtk_grid_get_child_at( recv, left, top );
+       fun get_child_at(left: Int, top: Int): GtkWidget `{
+               return gtk_grid_get_child_at(recv, left, top);
        `}
 
        # Insert a row at the specified position
-       fun insert_row( position :Int ) is extern `{
-               gtk_grid_insert_row( recv, position );
+       fun insert_row(position:Int) `{
+               gtk_grid_insert_row(recv, position);
        `}
 
        # Insert a column at the specified position
-       fun insert_column( position : Int ) is extern `{
-               gtk_grid_insert_column( recv, position );
+       fun insert_column(position: Int) `{
+               gtk_grid_insert_column(recv, position);
+       `}
+end
+
+# A widget that can switch orientation
+extern class GtkOrientable `{GtkOrientable *`}
+       super GtkWidget
+
+       # Get the orientation of this widget
+       fun orientation: GtkOrientation `{
+               return gtk_orientable_get_orientation(recv);
+       `}
+
+       # Set the orientation of this widget
+       fun orientation=(orientation: GtkOrientation) `{
+               gtk_orientable_set_orientation(recv, orientation);
        `}
 end
 
 # A container box
 #
-# @https://developer.gnome.org/gtk3/3.4/GtkBox.html
+# See: https://developer.gnome.org/gtk3/3.4/GtkBox.html
 extern class GtkBox `{ GtkBox * `}
        super GtkContainer
+       super GtkOrientable
+
+       # Create a new `GtkBox` with the given `orientation` and `spacing` between its children
+       new (orientation: GtkOrientation, spacing: Int) `{
+               return (GtkBox *)gtk_box_new(orientation, spacing);
+       `}
+
+       # Give the children of `self` equal space in the box?
+       fun omogeneous: Bool `{ return gtk_box_get_homogeneous(recv); `}
+
+       # Give the children of `self` equal space in the box?
+       fun omogeneous=(omogeneous: Bool) `{
+               gtk_box_set_homogeneous(recv, omogeneous);
+       `}
+
+       # Add `child` and pack it at the start of the box
+       fun pack_start(child: GtkWidget, expand, fill: Bool, padding: Int) `{
+               gtk_box_pack_start(recv, child, expand, fill, padding);
+       `}
+
+       # Add `child` and pack it at the end of the box
+       fun pack_end(child: GtkWidget, expand, fill: Bool, padding: Int) `{
+               gtk_box_pack_end(recv, child, expand, fill, padding);
+       `}
+
+       # Set the way `child` is packed in `self`
+       fun set_child_packing(child: GtkWidget, expand, fill: Bool, padding: Int, packing: GtkPackType) `{
+               gtk_box_set_child_packing(recv, child, expand, fill, padding, packing);
+       `}
 end
 
-#The tree interface used by GtkTreeView
-#@https://developer.gnome.org/gtk3/stable/GtkTreeModel.html
+# The tree interface used by GtkTreeView
+# See: https://developer.gnome.org/gtk3/stable/GtkTreeModel.html
 extern class GtkTreeModel `{GtkTreeModel *`}
 end
 
-#An abstract class for laying out GtkCellRenderers
-#@https://developer.gnome.org/gtk3/stable/GtkCellArea.html
+# An abstract class for laying out GtkCellRenderers
+# See: https://developer.gnome.org/gtk3/stable/GtkCellArea.html
 extern class GtkCellArea `{GtkCellArea *`}
 end
 
-#Base class for widgets with alignments and padding
-#@https://developer.gnome.org/gtk3/3.2/GtkMisc.html
+# Base class for widgets with alignments and padding
+# See: https://developer.gnome.org/gtk3/3.2/GtkMisc.html
 extern class GtkMisc `{GtkMisc *`}
        super GtkWidget
 
-       fun alignment : GtkAlignment is abstract
+       fun alignment: GtkAlignment is abstract
 
-       fun alignment=( x : Float, y : Float ) is extern `{
-               gtk_misc_set_alignment( recv, x, y );
+       fun alignment=(x: Float, y: Float) `{
+               gtk_misc_set_alignment(recv, x, y);
        `}
 
-       fun padding : GtkAlignment is abstract
+       fun padding: GtkAlignment is abstract
 
-       fun padding=( x : Float, y : Float ) is extern `{
-               gtk_misc_set_padding( recv, x, y );
+       fun padding=(x: Float, y: Float) `{
+               gtk_misc_set_padding(recv, x, y);
        `}
 
 end
 
-#A single line text entry field
-#@https://developer.gnome.org/gtk3/3.2/GtkEntry.html
+# A single line text entry field
+# See: https://developer.gnome.org/gtk3/3.2/GtkEntry.html
 extern class GtkEntry `{GtkEntry *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkEntry *)gtk_entry_new();
        `}
 
-       fun text : String is extern import NativeString.to_s_with_copy `{
-               return NativeString_to_s_with_copy( (char *)gtk_entry_get_text( recv ) );
+       fun text: String import NativeString.to_s_with_copy `{
+               return NativeString_to_s_with_copy((char *)gtk_entry_get_text(recv));
        `}
 
-       fun text=( value : String) is extern import String.to_cstring`{
-               gtk_entry_set_text( recv, String_to_cstring( value ) );
+       fun text=(value: String) import String.to_cstring `{
+               gtk_entry_set_text(recv, String_to_cstring(value));
        `}
 
        # Is the text visible or is it the invisible char (such as '*')?
-       fun visiblility: Bool is extern `{
-               return gtk_entry_get_visibility( recv );
+       fun visiblility: Bool `{
+               return gtk_entry_get_visibility(recv);
        `}
 
        # Set the text visiblility
        # If false, will use the invisible char (such as '*')
-       fun visibility=( is_visible : Bool) is extern `{
-               gtk_entry_set_visibility( recv, is_visible );
+       fun visibility=(is_visible: Bool) `{
+               gtk_entry_set_visibility(recv, is_visible);
        `}
 
-       fun max_length : Int is extern `{
-               return gtk_entry_get_max_length( recv );
+       fun max_length: Int `{
+               return gtk_entry_get_max_length(recv);
        `}
 
-       fun max_length=( max : Int) is extern `{
-               gtk_entry_set_max_length( recv, max );
+       fun max_length=(max: Int) `{
+               gtk_entry_set_max_length(recv, max);
        `}
 end
 
-#Base class for widgets which visualize an adjustment
-#@https://developer.gnome.org/gtk3/3.2/GtkRange.html
+# Base class for widgets which visualize an adjustment
+# See: https://developer.gnome.org/gtk3/3.2/GtkRange.html
 extern class GtkRange `{GtkRange *`}
        super GtkWidget
 
-       #Gets the current position of the fill level indicator.
-       fun fill_level : Float is extern `{
-               return gtk_range_get_fill_level( recv );
+       # Gets the current position of the fill level indicator.
+       fun fill_level: Float `{
+               return gtk_range_get_fill_level(recv);
        `}
 
-       fun fill_level=( level : Float ) is extern `{
-               gtk_range_set_fill_level( recv, level );
+       fun fill_level=(level: Float) `{
+               gtk_range_set_fill_level(recv, level);
        `}
 
-       #Gets whether the range is restricted to the fill level.
-       fun restricted_to_fill_level : Bool is extern `{
-               return gtk_range_get_restrict_to_fill_level( recv );
+       # Gets whether the range is restricted to the fill level.
+       fun restricted_to_fill_level: Bool `{
+               return gtk_range_get_restrict_to_fill_level(recv);
        `}
 
-       fun restricted_to_fill_level=( restricted : Bool ) is extern `{
-               gtk_range_set_restrict_to_fill_level( recv, restricted );
+       fun restricted_to_fill_level=(restricted: Bool) `{
+               gtk_range_set_restrict_to_fill_level(recv, restricted);
        `}
 
-       #Gets whether the range displays the fill level graphically.
-       fun show_fill_level : Bool is extern `{
-               return gtk_range_get_show_fill_level( recv );
+       # Gets whether the range displays the fill level graphically.
+       fun show_fill_level: Bool `{
+               return gtk_range_get_show_fill_level(recv);
        `}
 
-       fun show_fill_level=( is_displayed : Bool ) is extern `{
-               gtk_range_set_show_fill_level( recv, is_displayed );
+       fun show_fill_level=(is_displayed: Bool) `{
+               gtk_range_set_show_fill_level(recv, is_displayed);
        `}
 
-       fun adjustment : GtkAdjustment is extern `{
-               return gtk_range_get_adjustment( recv );
+       fun adjustment: GtkAdjustment `{
+               return gtk_range_get_adjustment(recv);
        `}
 
-       fun adjustment=( value : GtkAdjustment ) is extern `{
-               gtk_range_set_adjustment( recv, value );
+       fun adjustment=(value: GtkAdjustment) `{
+               gtk_range_set_adjustment(recv, value);
        `}
 
-       fun inverted : Bool is extern `{
-               return gtk_range_get_inverted( recv );
+       fun inverted: Bool `{
+               return gtk_range_get_inverted(recv);
        `}
 
-       fun inverted=( setting : Bool ) is extern `{
-               gtk_range_set_inverted( recv, setting );
+       fun inverted=(setting: Bool) `{
+               gtk_range_set_inverted(recv, setting);
        `}
 
-       fun value : Float is extern `{
-               return gtk_range_get_value( recv );
+       fun value: Float `{
+               return gtk_range_get_value(recv);
        `}
 
-       fun value=( val : Float ) is extern `{
-               gtk_range_set_value( recv, val );
+       fun value=(val: Float) `{
+               gtk_range_set_value(recv, val);
        `}
 
-       fun set_increments( step : Float, page : Float ) is extern `{
-               gtk_range_set_increments( recv, step, page );
+       fun set_increments(step: Float, page: Float) `{
+               gtk_range_set_increments(recv, step, page);
        `}
 
-       fun set_range( min : Float, max : Float ) is extern `{
-               gtk_range_set_range( recv, min, max );
+       fun set_range(min: Float, max: Float) `{
+               gtk_range_set_range(recv, min, max);
        `}
 
-       fun round_digits : Int is extern `{
-               return gtk_range_get_round_digits( recv );
+       fun round_digits: Int `{
+               return gtk_range_get_round_digits(recv);
        `}
 
-       fun round_digits=( nb : Int ) is extern `{
-               gtk_range_set_round_digits( recv, nb );
+       fun round_digits=(nb: Int) `{
+               gtk_range_set_round_digits(recv, nb);
        `}
 
-       fun size_fixed : Bool is extern `{
-               return gtk_range_get_slider_size_fixed( recv );
+       fun size_fixed: Bool `{
+               return gtk_range_get_slider_size_fixed(recv);
        `}
 
-       fun size_fixed=( is_fixed : Bool ) is extern `{
-               return gtk_range_set_slider_size_fixed( recv, is_fixed );
+       fun size_fixed=(is_fixed: Bool) `{
+               return gtk_range_set_slider_size_fixed(recv, is_fixed);
        `}
 
-       fun flippable : Bool is extern `{
-               return gtk_range_get_flippable( recv );
+       fun flippable: Bool `{
+               return gtk_range_get_flippable(recv);
        `}
 
-       fun min_size=( is_flippable : Bool ) is extern `{
-               return gtk_range_set_flippable( recv, is_flippable );
+       fun min_size=(is_flippable: Bool) `{
+               return gtk_range_set_flippable(recv, is_flippable);
        `}
 
-       fun min_slider_size : Int is extern `{
-               return gtk_range_get_min_slider_size( recv );
+       fun min_slider_size: Int `{
+               return gtk_range_get_min_slider_size(recv);
        `}
 
-       fun min_slider_size=( size : Int ) is extern `{
-               return gtk_range_set_min_slider_size( recv, size );
+       fun min_slider_size=(size: Int) `{
+               return gtk_range_set_min_slider_size(recv, size);
        `}
 end
 
-#A slider widget for selecting a value from a range
-#@https://developer.gnome.org/gtk3/3.2/GtkScale.html
+# A slider widget for selecting a value from a range
+# See: https://developer.gnome.org/gtk3/3.2/GtkScale.html
 extern class GtkScale `{GtkScale *`}
        super GtkRange
 
-       new ( orientation : GtkOrientation, adjustment : GtkAdjustment ) is extern `{
-               return (GtkScale *)gtk_scale_new( orientation, adjustment );
+       new (orientation: GtkOrientation, adjustment: GtkAdjustment) `{
+               return (GtkScale *)gtk_scale_new(orientation, adjustment);
        `}
 
-       new with_range ( orientation : GtkOrientation, min : Float, max : Float, step : Float ) is extern `{
-               return (GtkScale *)gtk_scale_new_with_range( orientation, min, max, step );
+       new with_range (orientation: GtkOrientation, min: Float, max: Float, step: Float) `{
+               return (GtkScale *)gtk_scale_new_with_range(orientation, min, max, step);
        `}
 
-       fun digits : Int is extern `{
-               return gtk_scale_get_digits( recv );
+       fun digits: Int `{
+               return gtk_scale_get_digits(recv);
        `}
 
-       fun digits=( nb_digits : Int ) is extern `{
-               gtk_scale_set_digits( recv, nb_digits );
+       fun digits=(nb_digits: Int) `{
+               gtk_scale_set_digits(recv, nb_digits);
        `}
 
-       fun draw_value : Bool is extern `{
-               return gtk_scale_get_draw_value( recv );
+       fun draw_value: Bool `{
+               return gtk_scale_get_draw_value(recv);
        `}
 
-       fun draw_value=( is_displayed : Bool ) is extern `{
-               gtk_scale_set_draw_value( recv, is_displayed );
+       fun draw_value=(is_displayed: Bool) `{
+               gtk_scale_set_draw_value(recv, is_displayed);
        `}
 
-       fun value_position : GtkPositionType is extern `{
-               return gtk_scale_get_value_pos( recv );
+       fun value_position: GtkPositionType `{
+               return gtk_scale_get_value_pos(recv);
        `}
 
-       fun value_position=( pos : GtkPositionType ) is extern `{
-               gtk_scale_set_value_pos( recv, pos );
+       fun value_position=(pos: GtkPositionType) `{
+               gtk_scale_set_value_pos(recv, pos);
        `}
 
-       fun has_origin : Bool is extern `{
-               return gtk_scale_get_has_origin( recv );
+       fun has_origin: Bool `{
+               return gtk_scale_get_has_origin(recv);
        `}
 
-       fun has_origin=( orig : Bool ) is extern `{
-               gtk_scale_set_has_origin( recv, orig );
+       fun has_origin=(orig: Bool) `{
+               gtk_scale_set_has_origin(recv, orig);
        `}
 
-       fun add_mark( value : Float, position : GtkPositionType, markup : String ) is extern import String.to_cstring`{
-               gtk_scale_add_mark( recv, value, position, String_to_cstring( markup ) );
+       fun add_mark(value: Float, position: GtkPositionType, markup: String)
+       import String.to_cstring `{
+               gtk_scale_add_mark(recv, value, position, String_to_cstring(markup));
        `}
 
-       #Removes any marks that have been added with gtk_scale_add_mark().
-       fun clear_marks is extern `{
-               gtk_scale_clear_marks( recv );
+       # Removes any marks that have been added with gtk_scale_add_mark().
+       fun clear_marks `{
+               gtk_scale_clear_marks(recv);
        `}
-
-       #get layout
-       #get layout offsets
-
 end
 
-#A scrollbar
-#@https://developer.gnome.org/gtk3/3.2/GtkScrollbar.html
+# A scrollbar
+# See: https://developer.gnome.org/gtk3/3.2/GtkScrollbar.html
 extern class GtkScrollbar `{GtkScrollbar *`}
        super GtkRange
 
-               new ( orientation : GtkOrientation, adjustment : GtkAdjustment ) is extern `{
-               return (GtkScrollbar *)gtk_scrollbar_new( orientation, adjustment );
+               new (orientation: GtkOrientation, adjustment: GtkAdjustment) `{
+               return (GtkScrollbar *)gtk_scrollbar_new(orientation, adjustment);
        `}
 end
 
-#A widget that displays a small to medium amount of text
-#@https://developer.gnome.org/gtk3/3.2/GtkLabel.html
+# A widget that displays a small to medium amount of text
+# See: https://developer.gnome.org/gtk3/3.2/GtkLabel.html
 extern class GtkLabel `{GtkLabel *`}
        super GtkMisc
 
        # Create a GtkLabel with text
-       new ( text : String ) is extern import String.to_cstring `{
-               return (GtkLabel*)gtk_label_new( String_to_cstring( text ) );
+       new (text: String) import String.to_cstring `{
+               return (GtkLabel*)gtk_label_new(String_to_cstring(text));
        `}
 
        # Set the text of the label
-       fun text=( text : String ) import String.to_cstring `{
-               gtk_label_set_text( recv, String_to_cstring( text ) );
+       fun text=(text: String) import String.to_cstring `{
+               gtk_label_set_text(recv, String_to_cstring(text));
        `}
 
        # Returns the text of the label
-       fun text : String import NativeString.to_s `{
-               return NativeString_to_s( (char*)gtk_label_get_text( recv ) );
+       fun text: String import NativeString.to_s `{
+               return NativeString_to_s((char*)gtk_label_get_text(recv));
        `}
 
        # Sets the angle of rotation for the label.
        # An angle of 90 reads from from bottom to top, an angle of 270, from top to bottom.
-       fun angle=( degre : Float ) `{
-               gtk_label_set_angle( recv, degre );
+       fun angle=(degre: Float) `{
+               gtk_label_set_angle(recv, degre);
        `}
 
        # Returns the angle of rotation for the label.
-       fun angle : Float `{
-               return gtk_label_get_angle( recv );
+       fun angle: Float `{
+               return gtk_label_get_angle(recv);
        `}
 
 end
 
-#A widget displaying an image
-#@https://developer.gnome.org/gtk3/3.2/GtkImage.html
+# A widget displaying an image
+# See: https://developer.gnome.org/gtk3/3.2/GtkImage.html
 extern class GtkImage `{GtkImage *`}
        super GtkMisc
 
        # Create a GtkImage
-       new is extern `{
-               return (GtkImage*)gtk_image_new( );
+       new `{
+               return (GtkImage*)gtk_image_new();
        `}
 
        # Create a GtkImage with text
-       new file( filename : String ) is extern import String.to_cstring `{
-               return (GtkImage*)gtk_image_new_from_file( String_to_cstring( filename ) );
+       new file(filename: String) import String.to_cstring `{
+               return (GtkImage*)gtk_image_new_from_file(String_to_cstring(filename));
        `}
 
-       fun pixel_size : Int is extern `{
-               return gtk_image_get_pixel_size( recv );
+       fun pixel_size: Int `{
+               return gtk_image_get_pixel_size(recv);
        `}
 
-       fun pixel_size=( size : Int) is extern `{
-               gtk_image_set_pixel_size( recv, size );
+       fun pixel_size=(size: Int) `{
+               gtk_image_set_pixel_size(recv, size);
        `}
 
-       fun clear is extern `{
-               gtk_image_clear( recv );
+       fun clear `{
+               gtk_image_clear(recv);
        `}
 end
 
-#enum GtkImageType
-#Describes the image data representation used by a GtkImage.
-#@https://developer.gnome.org/gtk3/3.2/GtkImage.html#GtkImageType
+# enum GtkImageType
+# Describes the image data representation used by a GtkImage.
+# See: https://developer.gnome.org/gtk3/3.2/GtkImage.html#GtkImageType
 extern class GtkImageType `{GtkImageType`}
        # There is no image displayed by the widget.
        new empty `{ return GTK_IMAGE_EMPTY; `}
@@ -685,343 +728,330 @@ extern class GtkImageType `{GtkImageType`}
        new gicon `{ return GTK_IMAGE_GICON; `}
 end
 
-#Displays an arrow
-#@https://developer.gnome.org/gtk3/3.2/GtkArrow.html
+# Displays an arrow
+# See: https://developer.gnome.org/gtk3/3.2/GtkArrow.html
 extern class GtkArrow `{GtkArrow *`}
        super GtkMisc
 
-       new ( arrow_type : GtkArrowType, shadow_type : GtkShadowType ) is extern `{
-               return (GtkArrow *)gtk_arrow_new( arrow_type, shadow_type );
+       new (arrow_type: GtkArrowType, shadow_type: GtkShadowType) `{
+               return (GtkArrow *)gtk_arrow_new(arrow_type, shadow_type);
        `}
 
-       fun set( arrow_type : GtkArrowType, shadow_type : GtkShadowType ) is extern `{
-               gtk_arrow_set( recv, arrow_type, shadow_type );
+       fun set(arrow_type: GtkArrowType, shadow_type: GtkShadowType) `{
+               gtk_arrow_set(recv, arrow_type, shadow_type);
        `}
 end
 
-#A widget that emits a signal when clicked on
-#@https://developer.gnome.org/gtk3/stable/GtkButton.html
+# A widget that emits a signal when clicked on
+# See: https://developer.gnome.org/gtk3/stable/GtkButton.html
 extern class GtkButton `{GtkButton *`}
        super GtkBin
 
-       new is extern `{
-               return (GtkButton *)gtk_button_new(  );
+       new `{
+               return (GtkButton *)gtk_button_new();
        `}
 
-       #Create a GtkButton with text
-       new with_label( text : String ) is extern import String.to_cstring `{
-               return (GtkButton *)gtk_button_new_with_label( String_to_cstring( text ) );
+       # Create a GtkButton with text
+       new with_label(text: String) import String.to_cstring `{
+               return (GtkButton *)gtk_button_new_with_label(String_to_cstring(text));
        `}
 
-       new from_stock( stock_id : String ) is extern import String.to_cstring `{
-               return (GtkButton *)gtk_button_new_from_stock( String_to_cstring( stock_id ) );
+       new from_stock(stock_id: String) import String.to_cstring `{
+               return (GtkButton *)gtk_button_new_from_stock(String_to_cstring(stock_id));
        `}
 
-       fun text : String is extern `{
-               return NativeString_to_s( (char *)gtk_button_get_label( recv ) );
+       fun text: String `{
+               return NativeString_to_s((char *)gtk_button_get_label(recv));
        `}
 
-       fun text=( value : String ) is extern import String.to_cstring`{
-               gtk_button_set_label( recv, String_to_cstring( value ) );
+       fun text=(value: String) import String.to_cstring `{
+               gtk_button_set_label(recv, String_to_cstring(value));
        `}
 
-       fun on_click( to_call : GtkCallable, user_data : nullable Object ) do
-                       signal_connect( "clicked", to_call, user_data )
+       fun on_click(to_call: GtkCallable, user_data: nullable Object) do
+                       signal_connect("clicked", to_call, user_data)
        end
 
 end
 
-#A button which pops up a scale
-#@https://developer.gnome.org/gtk3/stable/GtkScaleButton.html
+# A button which pops up a scale
+# See: https://developer.gnome.org/gtk3/stable/GtkScaleButton.html
 extern class GtkScaleButton `{GtkScaleButton *`}
        super GtkButton
 
-       #const gchar **icons
-       new( size: GtkIconSize, min: Float, max: Float, step: Float ) is extern `{
-               return (GtkScaleButton *)gtk_scale_button_new( size, min, max, step, (const char **)0 );
+       # const gchar **icons
+       new(size: GtkIconSize, min: Float, max: Float, step: Float) `{
+               return (GtkScaleButton *)gtk_scale_button_new(size, min, max, step, (const char **)0);
        `}
 end
 
-#Create buttons bound to a URL
-#@https://developer.gnome.org/gtk3/stable/GtkLinkButton.html
+# Create buttons bound to a URL
+# See: https://developer.gnome.org/gtk3/stable/GtkLinkButton.html
 extern class GtkLinkButton `{GtkLinkButton *`}
        super GtkButton
 
-       new( uri: String ) is extern import String.to_cstring `{
-               return (GtkLinkButton *)gtk_link_button_new( String_to_cstring(uri) );
+       new(uri: String) import String.to_cstring `{
+               return (GtkLinkButton *)gtk_link_button_new(String_to_cstring(uri));
        `}
 end
 
-#A container which can hide its child
-#https://developer.gnome.org/gtk3/stable/GtkExpander.html
+# A container which can hide its child
+# https://developer.gnome.org/gtk3/stable/GtkExpander.html
 extern class GtkExpander `{GtkExpander *`}
        super GtkBin
 
-       new( lbl : String) is extern import String.to_cstring`{
-               return (GtkExpander *)gtk_expander_new( String_to_cstring( lbl ) );
+       new(lbl: String) import String.to_cstring `{
+               return (GtkExpander *)gtk_expander_new(String_to_cstring(lbl));
        `}
 
-       new with_mnemonic( lbl : String) is extern import String.to_cstring`{
-               return (GtkExpander *)gtk_expander_new_with_mnemonic(String_to_cstring( lbl ));
+       new with_mnemonic(lbl: String) import String.to_cstring `{
+               return (GtkExpander *)gtk_expander_new_with_mnemonic(String_to_cstring(lbl));
        `}
 
-       fun expanded : Bool is extern `{
-               return gtk_expander_get_expanded( recv );
+       fun expanded: Bool `{
+               return gtk_expander_get_expanded(recv);
        `}
 
-       fun expanded=( is_expanded : Bool ) is extern `{
-               gtk_expander_set_expanded( recv, is_expanded );
+       fun expanded=(is_expanded: Bool) `{
+               gtk_expander_set_expanded(recv, is_expanded);
        `}
 
-       fun spacing : Int is extern `{
-               return gtk_expander_get_spacing( recv );
+       fun spacing: Int `{
+               return gtk_expander_get_spacing(recv);
        `}
 
-       fun spacing=( pixels : Int ) is extern `{
-               gtk_expander_set_spacing( recv, pixels );
+       fun spacing=(pixels: Int) `{
+               gtk_expander_set_spacing(recv, pixels);
        `}
 
-       fun label_text : String is extern `{
-               return NativeString_to_s( (char *)gtk_expander_get_label( recv ) );
+       fun label_text: String `{
+               return NativeString_to_s((char *)gtk_expander_get_label(recv));
        `}
 
-       fun label_text=( lbl : String ) is extern import String.to_cstring`{
-               gtk_expander_set_label( recv, String_to_cstring( lbl ) );
+       fun label_text=(lbl: String) import String.to_cstring `{
+               gtk_expander_set_label(recv, String_to_cstring(lbl));
        `}
 
-       fun use_underline : Bool is extern `{
-               return gtk_expander_get_use_underline( recv );
+       fun use_underline: Bool `{
+               return gtk_expander_get_use_underline(recv);
        `}
 
-       fun use_underline=( used : Bool) is extern `{
-               gtk_expander_set_use_underline( recv, used );
+       fun use_underline=(used: Bool) `{
+               gtk_expander_set_use_underline(recv, used);
        `}
 
-       fun use_markup : Bool is extern `{
-               return gtk_expander_get_use_markup( recv );
+       fun use_markup: Bool `{
+               return gtk_expander_get_use_markup(recv);
        `}
 
-       fun use_markup=( used : Bool) is extern `{
-                gtk_expander_set_use_markup( recv, used );
+       fun use_markup=(used: Bool) `{
+                gtk_expander_set_use_markup(recv, used);
        `}
 
-       fun label_widget : GtkWidget is extern `{
-               return gtk_expander_get_label_widget( recv );
+       fun label_widget: GtkWidget `{
+               return gtk_expander_get_label_widget(recv);
        `}
 
-       fun label_widget=( widget : GtkWidget ) is extern `{
-               gtk_expander_set_label_widget( recv, widget );
+       fun label_widget=(widget: GtkWidget) `{
+               gtk_expander_set_label_widget(recv, widget);
        `}
 
-       fun label_fill : Bool is extern `{
-               return gtk_expander_get_label_fill( recv );
+       fun label_fill: Bool `{
+               return gtk_expander_get_label_fill(recv);
        `}
 
-       fun label_fill=( fill : Bool ) is extern `{
-               gtk_expander_set_label_fill( recv, fill );
+       fun label_fill=(fill: Bool) `{
+               gtk_expander_set_label_fill(recv, fill);
        `}
 
-       fun resize_toplevel : Bool is extern `{
-               return gtk_expander_get_resize_toplevel( recv );
+       fun resize_toplevel: Bool `{
+               return gtk_expander_get_resize_toplevel(recv);
        `}
 
-       fun resize_toplevel=( resize : Bool ) is extern `{
-               gtk_expander_set_resize_toplevel( recv, resize );
+       fun resize_toplevel=(resize: Bool) `{
+               gtk_expander_set_resize_toplevel(recv, resize);
        `}
 
 end
 
-#An abstract class for laying out GtkCellRenderers
-#@https://developer.gnome.org/gtk3/stable/GtkCellArea.html
+# An abstract class for laying out GtkCellRenderers
+# See: https://developer.gnome.org/gtk3/stable/GtkCellArea.html
 extern class GtkComboBox `{GtkComboBox *`}
        super GtkBin
 
-       new is extern `{
-               return (GtkComboBox *)gtk_combo_box_new( );
+       new `{
+               return (GtkComboBox *)gtk_combo_box_new();
        `}
 
-       new with_entry is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_entry( );
+       new with_entry `{
+               return (GtkComboBox *)gtk_combo_box_new_with_entry();
        `}
 
-       new with_model( model : GtkTreeModel ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_model( model );
+       new with_model(model: GtkTreeModel) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_model(model);
        `}
 
-       new with_model_and_entry( model : GtkTreeModel ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_model_and_entry( model );
+       new with_model_and_entry(model: GtkTreeModel) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_model_and_entry(model);
        `}
 
-       new with_area( area : GtkCellArea ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_area( area );
+       new with_area(area: GtkCellArea) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_area(area);
        `}
 
-       new with_area_and_entry( area : GtkCellArea ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_area_and_entry( area );
+       new with_area_and_entry(area: GtkCellArea) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_area_and_entry(area);
        `}
 
-       fun wrap_width : Int is extern `{
-               return gtk_combo_box_get_wrap_width( recv );
+       fun wrap_width: Int `{
+               return gtk_combo_box_get_wrap_width(recv);
        `}
 
-       fun wrap_width=( width : Int ) is extern `{
-               gtk_combo_box_set_wrap_width( recv, width );
+       fun wrap_width=(width: Int) `{
+               gtk_combo_box_set_wrap_width(recv, width);
        `}
 
-       fun row_span_col : Int is extern `{
-               return gtk_combo_box_get_row_span_column( recv );
+       fun row_span_col: Int `{
+               return gtk_combo_box_get_row_span_column(recv);
        `}
 
-       fun row_span_col=( row_span : Int ) is extern `{
-               gtk_combo_box_set_row_span_column( recv, row_span );
+       fun row_span_col=(row_span: Int) `{
+               gtk_combo_box_set_row_span_column(recv, row_span);
        `}
 
-       fun col_span_col : Int is extern `{
-               return gtk_combo_box_get_column_span_column( recv );
+       fun col_span_col: Int `{
+               return gtk_combo_box_get_column_span_column(recv);
        `}
 
-       fun col_span_col=( col_span : Int ) is extern `{
-               gtk_combo_box_set_column_span_column( recv, col_span );
+       fun col_span_col=(col_span: Int) `{
+               gtk_combo_box_set_column_span_column(recv, col_span);
        `}
 
-       fun active_item : Int is extern `{
-               return gtk_combo_box_get_active( recv );
+       fun active_item: Int `{
+               return gtk_combo_box_get_active(recv);
        `}
 
-       fun active_item=( active : Int ) is extern `{
-               gtk_combo_box_set_active( recv, active );
+       fun active_item=(active: Int) `{
+               gtk_combo_box_set_active(recv, active);
        `}
 
-       #fun active_iter : GtkTreeIter is extern `{
-       #`}
-       #
-       #fun active_iter=( active : Bool ) is extern `{
-       #`}
-
-       fun column_id : Int is extern `{
-               return gtk_combo_box_get_id_column( recv );
+       fun column_id: Int `{
+               return gtk_combo_box_get_id_column(recv);
        `}
 
-       fun column_id=( id_column : Int ) is extern `{
-               gtk_combo_box_set_id_column( recv, id_column );
+       fun column_id=(id_column: Int) `{
+               gtk_combo_box_set_id_column(recv, id_column);
        `}
 
-       fun active_id : String is extern `{
-               return NativeString_to_s( (char *)gtk_combo_box_get_active_id( recv ) );
+       fun active_id: String `{
+               return NativeString_to_s((char *)gtk_combo_box_get_active_id(recv));
        `}
 
-       fun active_id=( id_active : String ) is extern import String.to_cstring`{
-               gtk_combo_box_set_active_id( recv, String_to_cstring( id_active ) );
+       fun active_id=(id_active: String) import String.to_cstring `{
+               gtk_combo_box_set_active_id(recv, String_to_cstring(id_active));
        `}
 
-       fun model : GtkTreeModel is extern `{
-               return gtk_combo_box_get_model( recv );
+       fun model: GtkTreeModel `{
+               return gtk_combo_box_get_model(recv);
        `}
 
-       fun model=( model : GtkTreeModel ) is extern `{
-               gtk_combo_box_set_model( recv, model );
+       fun model=(model: GtkTreeModel) `{
+               gtk_combo_box_set_model(recv, model);
        `}
 
-       fun popup is extern `{
-               gtk_combo_box_popup( recv );
+       fun popup `{
+               gtk_combo_box_popup(recv);
        `}
 
-       fun popdown is extern `{
-               gtk_combo_box_popdown( recv );
+       fun popdown `{
+               gtk_combo_box_popdown(recv);
        `}
 
-       fun title : String is extern`{
-               return NativeString_to_s( (char *)gtk_combo_box_get_title( recv ) );
+       fun title: String `{
+               return NativeString_to_s((char *)gtk_combo_box_get_title(recv));
        `}
 
-       fun title=( t : String ) is extern import String.to_cstring `{
-               gtk_combo_box_set_title( recv, String_to_cstring( t ) );
+       fun title=(t: String) import String.to_cstring `{
+               gtk_combo_box_set_title(recv, String_to_cstring(t));
        `}
 
-       fun has_entry : Bool is extern `{
-               return gtk_combo_box_get_has_entry( recv );
+       fun has_entry: Bool `{
+               return gtk_combo_box_get_has_entry(recv);
        `}
 
-       fun with_fixed : Bool is extern `{
-               return gtk_combo_box_get_popup_fixed_width( recv );
+       fun with_fixed: Bool `{
+               return gtk_combo_box_get_popup_fixed_width(recv);
        `}
 
-       fun with_fixed=( fixed : Bool ) is extern `{
-               gtk_combo_box_set_popup_fixed_width( recv, fixed );
+       fun with_fixed=(fixed: Bool) `{
+               gtk_combo_box_set_popup_fixed_width(recv, fixed);
        `}
 end
 
-#Show a spinner animation
-#@https://developer.gnome.org/gtk3/3.2/GtkSpinner.html
+# Show a spinner animation
+# See: https://developer.gnome.org/gtk3/3.2/GtkSpinner.html
 extern class GtkSpinner `{GtkSpinner *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkSpinner *)gtk_spinner_new();
        `}
 
-       fun start is extern `{
-               return gtk_spinner_start( recv );
+       fun start `{
+               return gtk_spinner_start(recv);
        `}
 
-       fun stop is extern `{
-               return gtk_spinner_stop( recv );
+       fun stop `{
+               return gtk_spinner_stop(recv);
        `}
 end
 
-#A "light switch" style toggle
-#@https://developer.gnome.org/gtk3/3.2/GtkSwitch.html
+# A "light switch" style toggle
+# See: https://developer.gnome.org/gtk3/3.2/GtkSwitch.html
 extern class GtkSwitch `{GtkSwitch *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkSwitch *)gtk_switch_new();
        `}
 
-       fun active : Bool is extern `{
-               return gtk_switch_get_active( recv );
+       fun active: Bool `{
+               return gtk_switch_get_active(recv);
        `}
 
-       fun active=( is_active : Bool ) is extern `{
-               return gtk_switch_set_active( recv, is_active );
+       fun active=(is_active: Bool) `{
+               return gtk_switch_set_active(recv, is_active);
        `}
 end
 
-
-#A widget which controls the alignment and size of its child
-#https://developer.gnome.org/gtk3/stable/GtkAlignment.html
+# A widget which controls the alignment and size of its child
+# https://developer.gnome.org/gtk3/stable/GtkAlignment.html
 extern class GtkAlignment `{GtkAlignment *`}
        super GtkBin
 
-       new ( xalign : Float, yalign : Float, xscale : Float, yscale : Float ) is extern `{
-               return (GtkAlignment *)gtk_alignment_new( xalign, yalign, xscale, yscale );
+       new (xalign: Float, yalign: Float, xscale: Float, yscale: Float) `{
+               return (GtkAlignment *)gtk_alignment_new(xalign, yalign, xscale, yscale);
        `}
 
-       fun set ( xalign : Float, yalign : Float, xscale : Float, yscale : Float ) is extern `{
-               gtk_alignment_set( recv, xalign, yalign, xscale, yscale );
+       fun set (xalign: Float, yalign: Float, xscale: Float, yscale: Float) `{
+               gtk_alignment_set(recv, xalign, yalign, xscale, yscale);
        `}
 
-       #get_padding
-       #set_padding
 end
 
-#A representation of an adjustable bounded value
-#@https://developer.gnome.org/gtk3/stable/GtkAdjustment.html#GtkAdjustment.description
+# A representation of an adjustable bounded value
+# See: https://developer.gnome.org/gtk3/stable/GtkAdjustment.html#GtkAdjustment.description
 extern class GtkAdjustment `{GtkAdjustment *`}
-
 end
 
 extern class GdkColor `{GdkColor*`}
-       new is extern `{
-               GdkColor * col = malloc(sizeof(GdkColor));
-               /*gdk_color_parse( "red", recv );*/
-               gdk_color_parse( "red", col);
-               return col;
+       new (color_name: String) import String.to_cstring `{
+               GdkColor *color = malloc(sizeof(GdkColor));
+               gdk_color_parse(String_to_cstring(color_name), color);
+               return color;
        `}
 end
 
 extern class GdkRGBA `{GdkRGBA*`}
-       new is extern `{
-       `}
 end
 
index 079eb71..f97ce3a 100644 (file)
@@ -23,299 +23,315 @@ in "C Header" `{
        #include <gtk/gtk.h>
 `}
 
-#Create popup windows
-#@https://developer.gnome.org/gtk3/stable/GtkDialog.html
+# Create popup windows
+# See: https://developer.gnome.org/gtk3/stable/GtkDialog.html
 extern class GtkDialog `{GtkDialog *`}
        super GtkWindow
 
-       new is extern `{
-               return (GtkDialog *)gtk_dialog_new( );
+       new `{
+               return (GtkDialog *)gtk_dialog_new();
        `}
 
-       new with_buttons( title : String, parent : GtkWindow, flags : GtkDialogFlags) is extern import String.to_cstring`{
-               return (GtkDialog *)gtk_dialog_new_with_buttons( String_to_cstring( title ), parent, flags, "", NULL );
+       new with_buttons(title: String, parent: GtkWindow, flags: GtkDialogFlags)
+       import String.to_cstring `{
+               return (GtkDialog *)gtk_dialog_new_with_buttons(
+                       String_to_cstring(title), parent, flags, "", NULL);
        `}
 
-       fun run is extern `{
-               gtk_dialog_run( recv );
+       fun run `{
+               gtk_dialog_run(recv);
        `}
-
 end
 
-#Display information about an application
-#@https://developer.gnome.org/gtk3/stable/GtkAboutDialog.html
+# Display information about an application
+# See: https://developer.gnome.org/gtk3/stable/GtkAboutDialog.html
 extern class GtkAboutDialog `{GtkAboutDialog *`}
        super GtkDialog
 
-       new is extern `{
-               return (GtkAboutDialog *)gtk_about_dialog_new( );
+       new `{
+               return (GtkAboutDialog *)gtk_about_dialog_new();
        `}
 
-       fun program_name : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_program_name( recv ) );
+       fun program_name: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_program_name(recv));
        `}
 
-       fun program_name=( name : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_program_name( recv, String_to_cstring( name ) );
+       fun program_name=(name: String) import String.to_cstring `{
+               gtk_about_dialog_set_program_name(recv, String_to_cstring(name));
        `}
 
-       fun version : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_version( recv ) );
+       fun version: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_version(recv));
        `}
 
-       fun version=( v : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_version( recv, String_to_cstring( v ) );
+       fun version=(v: String) import String.to_cstring `{
+               gtk_about_dialog_set_version(recv, String_to_cstring(v));
        `}
 
-       fun copyright : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_copyright( recv ) );
+       fun copyright: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_copyright(recv));
        `}
 
-       fun copyright=( c : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_copyright( recv, String_to_cstring( c ) );
+       fun copyright=(c: String) import String.to_cstring `{
+               gtk_about_dialog_set_copyright(recv, String_to_cstring(c));
        `}
 
-       fun comments : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_comments( recv ) );
+       fun comments: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_comments(recv));
        `}
 
-       fun comments=( com : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_comments( recv, String_to_cstring( com ) );
+       fun comments=(com: String) import String.to_cstring `{
+               gtk_about_dialog_set_comments(recv, String_to_cstring(com));
        `}
 
-       fun license : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_license( recv ) );
+       fun license: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_license(recv));
        `}
 
-       fun license=( li : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_license( recv, String_to_cstring( li ) );
+       fun license=(li: String) import String.to_cstring `{
+               gtk_about_dialog_set_license(recv, String_to_cstring(li));
        `}
 
-       #license_type
+       # license_type
 
-       fun website : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_website( recv ) );
+       fun website: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_website(recv));
        `}
 
-       fun website=( link : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_website( recv, String_to_cstring( link ) );
+       fun website=(link: String) import String.to_cstring `{
+               gtk_about_dialog_set_website(recv, String_to_cstring(link));
        `}
 
-       fun website_label : String import NativeString.to_s `{
-               return NativeString_to_s( (char *) gtk_about_dialog_get_website_label( recv ) );
+       fun website_label: String import NativeString.to_s `{
+               return NativeString_to_s((char *) gtk_about_dialog_get_website_label(recv));
        `}
 
-       fun website_label=( link_label : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_website_label( recv, String_to_cstring( link_label ) );
+       fun website_label=(link_label: String) import String.to_cstring `{
+               gtk_about_dialog_set_website_label(recv, String_to_cstring(link_label));
        `}
 
-       #TODO
-       #fun authors : String is extern`{
-       #               return NativeString_to_s( gtk_about_dialog_get_authors( recv ) );
-       #`}
+       # TODO
+       # fun authors: String`{
+       #               return NativeString_to_s(gtk_about_dialog_get_authors(recv));
+       # `}
 
-       #TODO
-       #fun authors=( authors_list : String ) is extern import String.to_cstring`{
-       #       gtk_about_dialog_set_authors( recv, String_to_cstring( authors_list ) );
-       #`}
+       # TODO
+       # fun authors=(authors_list: String) import String.to_cstring`{
+       #       gtk_about_dialog_set_authors(recv, String_to_cstring(authors_list));
+       # `}
 
-       fun show_about_dialog(parent: GtkWindow, params: String) import String.to_cstring `{
+       fun show_about_dialog(parent: GtkWindow, params: String)
+       import String.to_cstring `{
                gtk_show_about_dialog(parent, String_to_cstring(params), NULL);
        `}
 end
 
-#An application chooser dialog
-#@https://developer.gnome.org/gtk3/stable/GtkAppChooserDialog.html
+# An application chooser dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkAppChooserDialog.html
 extern class GtkAppChooserDialog `{GtkAppChooserDialog *`}
        super GtkDialog
 
-       #TODO - GFile
-       #new ( parent : GtkWindow, flags : GtkDialogFlags, file : GFile ) is extern `{
-       #       return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new( parent, flags, file );
-       #`}
+       # TODO - GFile
+       # new (parent: GtkWindow, flags: GtkDialogFlags, file: GFile) `{
+       #       return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new(parent, flags, file);
+       # `}
 
-       new for_content_type ( parent : GtkWindow, flags : GtkDialogFlags, content_type : String ) is extern  import String.to_cstring `{
-               return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new_for_content_type( parent, flags,                                                                                                                                                                                       String_to_cstring( content_type ) );
+       new for_content_type (parent: GtkWindow, flags: GtkDialogFlags, content_type: String)
+       import String.to_cstring `{
+               return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new_for_content_type(
+                       parent, flags, String_to_cstring(content_type));
        `}
 
-       fun widget : GtkWidget is extern `{ return gtk_app_chooser_dialog_get_widget( recv ); `}
+       fun widget: GtkWidget `{ return gtk_app_chooser_dialog_get_widget(recv); `}
 
-       fun heading : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_app_chooser_dialog_get_heading( recv ) );
+       fun heading: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_app_chooser_dialog_get_heading(recv));
        `}
 
-       fun heading=( text : String ) is extern import String.to_cstring `{
-               gtk_app_chooser_dialog_set_heading( recv, String_to_cstring( text ) );
+       fun heading=(text: String) import String.to_cstring `{
+               gtk_app_chooser_dialog_set_heading(recv, String_to_cstring(text));
        `}
 
 end
 
-#A dialog for choosing colors
-#@https://developer.gnome.org/gtk3/stable/GtkColorChooserDialog.html
+# A dialog for choosing colors
+# See: https://developer.gnome.org/gtk3/stable/GtkColorChooserDialog.html
 extern class GtkColorChooserDialog `{GtkColorChooserDialog *`}
        super GtkDialog
 
-       new ( title : String, parent : GtkWindow ) is extern import String.to_cstring `{
-               return (GtkColorChooserDialog *)gtk_color_chooser_dialog_new( String_to_cstring( title ), parent );
+       new (title: String, parent: GtkWindow) import String.to_cstring `{
+               return (GtkColorChooserDialog *)gtk_color_chooser_dialog_new(
+                       String_to_cstring(title), parent);
        `}
 end
 
-#A file chooser dialog, suitable for "File/Open" or "File/Save" commands
-#@https://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html
+# A file chooser dialog, suitable for "File/Open" or "File/Save" commands
+# See: https://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html
 extern class GtkFileChooserDialog `{GtkFileChooserDialog *`}
        super GtkDialog
 
-       new ( title : String, parent : GtkWindow, action : GtkFileChooserAction ) is extern import String.to_cstring `{
-               return (GtkFileChooserDialog *)gtk_file_chooser_dialog_new( String_to_cstring( title ), parent, action, "", NULL );
+       new (title: String, parent: GtkWindow, action: GtkFileChooserAction)
+       import String.to_cstring `{
+               return (GtkFileChooserDialog *)gtk_file_chooser_dialog_new(
+                       String_to_cstring(title), parent, action, "", NULL);
        `}
 end
 
-#enum GtkFileChooserAction
-#Describes whether a GtkFileChooser is being used to open existing files or to save to a possibly new file.
-#@https://developer.gnome.org/gtk3/stable/GtkFileChooser.html#GtkFileChooserAction
+# enum GtkFileChooserAction
+#
+# Describes whether a GtkFileChooser is being used to open existing files or to save to a possibly new file.
+# See: https://developer.gnome.org/gtk3/stable/GtkFileChooser.html#GtkFileChooserAction
 extern class GtkFileChooserAction `{GtkFileChooserAction`}
-       #Indicates open mode. The file chooser will only let the user pick an existing file.
+       # Open file mode
+       #
+       # The file chooser will only let the user pick an existing file.
        new open `{ return GTK_FILE_CHOOSER_ACTION_OPEN; `}
 
-       #Indicates save mode. The file chooser will let the user pick an existing file, or type in a new filename.
+       # Save file mode
+       #
+       # The file chooser will let the user pick an existing file, or type in a new filename.
        new save `{ return GTK_FILE_CHOOSER_ACTION_SAVE; `}
 
-       #Indicates an Open mode for selecting folders. The file chooser will let the user pick an existing folder.
+       # Select folder mode
+       #
+       # The file chooser will let the user pick an existing folder.
        new select_folder `{ return GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; `}
 
-       #Indicates a mode for creating a new folder. The file chooser will let the user name an existing or new folder.
+       # Create a new folder mode
+       #
+       # The file chooser will let the user name an existing or new folder.
        new create_folder `{ return GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER; `}
 end
 
-#A dialog for selecting fonts
-#@https://developer.gnome.org/gtk3/stable/GtkFontChooserDialog.html
+# A dialog for selecting fonts
+# See: https://developer.gnome.org/gtk3/stable/GtkFontChooserDialog.html
 extern class GtkFontChooserDialog `{GtkFontChooserDialog *`}
        super GtkDialog
 
-       new ( title : String, parent : GtkWindow ) is extern `{
-               return (GtkFontChooserDialog *)gtk_font_chooser_dialog_new( String_to_cstring( title ), parent );
+       new (title: String, parent: GtkWindow) `{
+               return (GtkFontChooserDialog *)gtk_font_chooser_dialog_new(String_to_cstring(title), parent);
        `}
 end
 
-#A convenient message window
-#@https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html
+# A convenient message window
+# See: https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html
 extern class GtkMessageDialog `{GtkMessageDialog *`}
        super GtkDialog
 
-       new ( parent : GtkWindow, flags : GtkDialogFlags, msg_type : GtkMessageType, btn_type : GtkButtonsType, format : String ) is extern import String.to_cstring `{
-               return (GtkMessageDialog *)gtk_message_dialog_new( parent, flags, msg_type, btn_type, String_to_cstring( format ), NULL );
+       new (parent: GtkWindow, flags: GtkDialogFlags, msg_type: GtkMessageType, btn_type: GtkButtonsType, format: String) import String.to_cstring `{
+               return (GtkMessageDialog *)gtk_message_dialog_new(parent, flags, msg_type, btn_type, String_to_cstring(format), NULL);
        `}
 end
 
-#enum GtkButtonsType
-#Prebuilt sets of buttons for the dialog. If none of these choices are appropriate, simply use GTK_BUTTONS_NONE then call gtk_dialog_add_buttons().
-#@https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkButtonsType
+# enum GtkButtonsType
+# Prebuilt sets of buttons for the dialog. If none of these choices are appropriate, simply use GTK_BUTTONS_NONE then call gtk_dialog_add_buttons().
+# See: https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkButtonsType
 extern class GtkButtonsType `{GtkButtonsType`}
-       #No buttons at all
+       # No buttons at all
        new none `{ return GTK_BUTTONS_NONE; `}
 
-       #An OK button.
+       # An OK button.
        new ok `{ return GTK_BUTTONS_OK; `}
 
-       #A Close button.
+       # A Close button.
        new close `{ return GTK_BUTTONS_CLOSE; `}
 
-       #A Cancel button.
+       # A Cancel button.
        new cancel `{ return GTK_BUTTONS_CANCEL; `}
 
-       #Yes and No buttons.
+       # Yes and No buttons.
        new yes_no `{ return GTK_BUTTONS_YES_NO; `}
 
-       #OK and Cancel buttons.
+       # OK and Cancel buttons.
        new ok_cancel `{ return GTK_BUTTONS_OK_CANCEL; `}
 end
 
-#enum GtkMessageType
-#The type of message being displayed in the dialog.
-#@https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkMessageType
+# enum GtkMessageType
+# The type of message being displayed in the dialog.
+# See: https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkMessageType
 extern class GtkMessageType `{GtkMessageType`}
-       #Informational message
+       # Informational message
        new info `{ return GTK_MESSAGE_INFO; `}
 
-       #Non-fatal warning message.
+       # Non-fatal warning message.
        new warning `{ return GTK_MESSAGE_WARNING; `}
 
-       #Question requiring a choice.
+       # Question requiring a choice.
        new question `{ return GTK_MESSAGE_QUESTION; `}
 
-       #Fatal error message.
+       # Fatal error message.
        new error `{ return GTK_MESSAGE_ERROR; `}
 
-       #None of the above, doesn't get an icon.
+       # None of the above, doesn't get an icon.
        new other `{ return GTK_MESSAGE_OTHER; `}
 end
 
-#A page setup dialog
-#@https://developer.gnome.org/gtk3/stable/GtkPageSetupUnixDialog.html
-#extern class GtkPageSetupUnixDialog `{GtkPageSetupUnixDialog *`}
+# A page setup dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkPageSetupUnixDialog.html
+# extern class GtkPageSetupUnixDialog `{GtkPageSetupUnixDialog *`}
 #      super GtkDialog
 #
-#end
+# end
 
-#A print dialog
-#@https://developer.gnome.org/gtk3/stable/GtkPrintUnixDialog.html
-#extern class GtkPrintUnixDialog `{GtkPrintUnixDialog *`}
+# A print dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkPrintUnixDialog.html
+# extern class GtkPrintUnixDialog `{GtkPrintUnixDialog *`}
 #      super GtkDialog
 #
-#end
+# end
 
-#Displays recently used files in a dialog
-#@https://developer.gnome.org/gtk3/stable/GtkRecentChooserDialog.html
+# Displays recently used files in a dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkRecentChooserDialog.html
 extern class GtkRecentChooserDialog `{GtkRecentChooserDialog *`}
        super GtkDialog
 
 end
 
 
-#enum GtkDialogFlags
-#Flags used to influence dialog construction.
-#@https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkDialogFlags
+# enum GtkDialogFlags
+# Flags used to influence dialog construction.
+# See: https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkDialogFlags
 extern class GtkDialogFlags `{GtkDialogFlags`}
-       #Make the constructed dialog modal.
+       # Make the constructed dialog modal.
        new modal `{ return GTK_DIALOG_MODAL; `}
 
-       #Destroy the dialog when its parent is destroyed.
+       # Destroy the dialog when its parent is destroyed.
        new destroy_with_parent `{ return GTK_DIALOG_DESTROY_WITH_PARENT; `}
 end
 
-#enum GtkResponseType
-#Predefined values for use as response ids in gtk_dialog_add_button().
-#@https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkResponseType
+# enum GtkResponseType
+# Predefined values for use as response ids in gtk_dialog_add_button().
+# See: https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkResponseType
 extern class GtkResponseType `{GtkResponseType`}
-       #Returned if an action widget has no response id, or if the dialog gets programmatically hidden or destroyed.
+       # Returned if an action widget has no response id, or if the dialog gets programmatically hidden or destroyed.
        new none `{ return GTK_RESPONSE_NONE; `}
 
-       #Generic response id, not used by GTK+ dialogs.
+       # Generic response id, not used by GTK+ dialogs.
        new reject `{ return GTK_RESPONSE_REJECT; `}
 
-       #Generic response id, not used by GTK+ dialogs
+       # Generic response id, not used by GTK+ dialogs
        new accept `{ return GTK_RESPONSE_ACCEPT; `}
 
-       #Returned if the dialog is deleted
+       # Returned if the dialog is deleted
        new delete_event `{ return GTK_RESPONSE_DELETE_EVENT; `}
-       #Returned by OK buttons in GTK+ dialogs.
+       # Returned by OK buttons in GTK+ dialogs.
        new ok `{ return GTK_RESPONSE_OK; `}
 
-       #Returned by Cancel buttons in GTK+ dialogs.
+       # Returned by Cancel buttons in GTK+ dialogs.
        new cancel `{ return GTK_RESPONSE_CANCEL; `}
 
-       #Returned by OK Close in GTK+ dialogs.
+       # Returned by OK Close in GTK+ dialogs.
        new close `{ return GTK_RESPONSE_CLOSE; `}
 
-       #Returned by OK Yes in GTK+ dialogs.
+       # Returned by OK Yes in GTK+ dialogs.
        new yes `{ return GTK_RESPONSE_YES; `}
 
-       #Returned by OK No in GTK+ dialogs.
+       # Returned by OK No in GTK+ dialogs.
        new no `{ return GTK_RESPONSE_NO; `}
 
-       #Returned by OK Apply in GTK+ dialogs.
+       # Returned by OK Apply in GTK+ dialogs.
        new apply `{ return GTK_RESPONSE_APPLY; `}
 
-       #Returned by OK Help in GTK+ dialogs.
+       # Returned by OK Help in GTK+ dialogs.
        new help `{ return GTK_RESPONSE_HELP; `}
 end
index 05d5ace..2a98464 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module gtk_widgets_ext is pkgconfig("gtk+-3.0")
+module gtk_widgets_ext is pkgconfig "gtk+-3.0"
 
 import gtk_core
 
-#Displays a calendar and allows the user to select a date
-#@https://developer.gnome.org/gtk3/3.2/GtkCalendar.html
+# Displays a calendar and allows the user to select a date
+# See: https://developer.gnome.org/gtk3/3.2/GtkCalendar.html
 extern class GtkCalendar `{GtkCalendar *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkCalendar *)gtk_calendar_new();
        `}
 
-       fun month=( month : Int, year : Int ) is extern `{
-               gtk_calendar_select_month( recv, month, year );
+       fun month=(month: Int, year: Int) `{
+               gtk_calendar_select_month(recv, month, year);
        `}
 
-       fun day=( day : Int ) is extern `{
-               gtk_calendar_select_day( recv, day );
+       fun day=(day: Int) `{
+               gtk_calendar_select_day(recv, day);
        `}
 
-       fun mark_day( day : Int ) is extern `{
-               gtk_calendar_mark_day( recv, day );
+       fun mark_day(day: Int) `{
+               gtk_calendar_mark_day(recv, day);
        `}
 
-       fun unmark_day( day : Int ) is extern `{
-               gtk_calendar_unmark_day( recv, day );
+       fun unmark_day(day: Int) `{
+               gtk_calendar_unmark_day(recv, day);
        `}
 
-       fun is_marked( day : Int ): Bool is extern `{
-               return gtk_calendar_get_day_is_marked( recv, day );
+       fun is_marked(day: Int): Bool `{
+               return gtk_calendar_get_day_is_marked(recv, day);
        `}
 
-   fun clear_marks is extern `{
-               gtk_calendar_clear_marks( recv );
+   fun clear_marks `{
+               gtk_calendar_clear_marks(recv);
        `}
 
-       fun display_options : GtkCalendarDisplayOptions is extern `{
-               return gtk_calendar_get_display_options( recv );
+       fun display_options: GtkCalendarDisplayOptions `{
+               return gtk_calendar_get_display_options(recv);
        `}
 
 
-       fun display_options=( options : GtkCalendarDisplayOptions) is extern `{
-               gtk_calendar_set_display_options( recv, options );
+       fun display_options=(options: GtkCalendarDisplayOptions) `{
+               gtk_calendar_set_display_options(recv, options);
        `}
 
-       #date en nit...
+       # date en nit...
        fun date: String is abstract
 end
 
-#enum GtkCalendarDisplayOptions
-#@https://developer.gnome.org/gtk3/3.2/GtkCalendar.html#GtkCalendarDisplayOptions
+# enum GtkCalendarDisplayOptions
+# See: https://developer.gnome.org/gtk3/3.2/GtkCalendar.html#GtkCalendarDisplayOptions
 extern class GtkCalendarDisplayOptions `{GtkCalendarDisplayOptions`}
        new show_heading `{ return GTK_CALENDAR_SHOW_HEADING; `}
        new show_day_names `{ return GTK_CALENDAR_SHOW_DAY_NAMES; `}
@@ -75,68 +75,68 @@ extern class GtkCalendarDisplayOptions `{GtkCalendarDisplayOptions`}
        new show_details `{ return GTK_CALENDAR_SHOW_DETAILS; `}
 end
 
-#A separator widget
-#@https://developer.gnome.org/gtk3/stable/GtkSeparator.html
+# A separator widget
+# See: https://developer.gnome.org/gtk3/stable/GtkSeparator.html
 extern class GtkSeparator `{GtkSeparator *`}
        super GtkWidget
 
-       new ( orientation : GtkOrientation ) is extern `{
-                return (GtkSeparator *)gtk_separator_new( orientation );
+       new (orientation: GtkOrientation) `{
+                return (GtkSeparator *)gtk_separator_new(orientation);
        `}
 
 end
 
-#A widget which indicates progress visually
-#@https://developer.gnome.org/gtk3/3.2/GtkProgressBar.html
+# A widget which indicates progress visually
+# See: https://developer.gnome.org/gtk3/3.2/GtkProgressBar.html
 extern class GtkProgressBar `{GtkProgressBar *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkProgressBar *)gtk_progress_bar_new();
        `}
 
-       fun pulse is extern `{
-               gtk_progress_bar_pulse( recv );
+       fun pulse `{
+               gtk_progress_bar_pulse(recv);
        `}
 
-       fun pulse_step : Float is extern `{
-               return gtk_progress_bar_get_pulse_step( recv );
+       fun pulse_step: Float `{
+               return gtk_progress_bar_get_pulse_step(recv);
        `}
 
-       fun pulse_step=( step : Float ) is extern `{
-               gtk_progress_bar_set_pulse_step( recv, step);
+       fun pulse_step=(step: Float) `{
+               gtk_progress_bar_set_pulse_step(recv, step);
        `}
 
-       fun fraction : Float is extern `{
-               return gtk_progress_bar_get_fraction( recv );
+       fun fraction: Float `{
+               return gtk_progress_bar_get_fraction(recv);
        `}
 
-       fun fraction=( fraction : Float) is extern `{
-               gtk_progress_bar_set_fraction( recv, fraction );
+       fun fraction=(fraction: Float) `{
+               gtk_progress_bar_set_fraction(recv, fraction);
        `}
 
-       fun inverted : Bool is extern `{
-               return gtk_progress_bar_get_inverted( recv );
+       fun inverted: Bool `{
+               return gtk_progress_bar_get_inverted(recv);
        `}
 
-       fun inverted=( is_inverted : Bool) is extern `{
-               gtk_progress_bar_set_inverted( recv, is_inverted );
+       fun inverted=(is_inverted: Bool) `{
+               gtk_progress_bar_set_inverted(recv, is_inverted);
        `}
 
-       fun show_text : Bool is extern `{
-               return gtk_progress_bar_get_show_text( recv );
+       fun show_text: Bool `{
+               return gtk_progress_bar_get_show_text(recv);
        `}
 
-       fun show_text=( show : Bool) is extern `{
-               gtk_progress_bar_set_show_text( recv, show );
+       fun show_text=(show: Bool) `{
+               gtk_progress_bar_set_show_text(recv, show);
        `}
 
-       fun text : String is extern import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_progress_bar_get_text( recv ) );
+       fun text: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_progress_bar_get_text(recv));
        `}
 
-       fun text=( value : String) is extern import String.to_cstring`{
-               gtk_progress_bar_set_text( recv, String_to_cstring( value ) );
+       fun text=(value: String) import String.to_cstring `{
+               gtk_progress_bar_set_text(recv, String_to_cstring(value));
        `}
 
        fun ellipsize is abstract
@@ -145,116 +145,104 @@ end
 
 extern class GtkColorSelectionDialog
        super GtkWidget
-       new ( title : String, parent : GtkWindow ) is extern  import String.to_cstring `{
-                return gtk_color_chooser_dialog_new( String_to_cstring( title ), parent );
+       new (title: String, parent: GtkWindow)  import String.to_cstring `{
+                return gtk_color_chooser_dialog_new(String_to_cstring(title), parent);
        `}
 
-       #fun color_selection :  is extern `{
-       #       return gtk_color_selection_dialog_get_color_selection( GTK_COLOR_SELECTION_DIALOG( recv ) );
-       #`}
+       # fun color_selection:  `{
+       #       return gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(recv));
+       # `}
 
-       #fun color : Float is extern `{
-       #       return gtk_color_selection_dialog_get_color_selection( GTK_COLOR_SELECTION_DIALOG( recv ) );
-       #`}
+       # fun color: Float `{
+       #       return gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(recv));
+       # `}
 end
 
-#Retrieve an integer or floating-point number from the user
-#@https://developer.gnome.org/gtk3/3.2/GtkSpinButton.html
+# Retrieve an integer or floating-point number from the user
+# See: https://developer.gnome.org/gtk3/3.2/GtkSpinButton.html
 extern class GtkSpinButton `{GtkSpinButton *`}
        super GtkEntry
 
-       new ( adjustment : GtkAdjustment, climb_rate : Float, digits : Int )is extern `{
-               return (GtkSpinButton *)gtk_spin_button_new( adjustment, climb_rate, digits );
+       new (adjustment: GtkAdjustment, climb_rate: Float, digits: Int)is extern `{
+               return (GtkSpinButton *)gtk_spin_button_new(adjustment, climb_rate, digits);
        `}
 
-       new with_range( min : Float, max : Float, step : Float )is extern `{
-               return (GtkSpinButton *)gtk_spin_button_new_with_range( min, max, step );
+       new with_range(min: Float, max: Float, step: Float)is extern `{
+               return (GtkSpinButton *)gtk_spin_button_new_with_range(min, max, step);
        `}
 
-       fun configure ( adjustment : GtkAdjustment, climb_rate : Float, digits : Int ) is extern `{
-               gtk_spin_button_configure( recv, adjustment, climb_rate, digits );
+       fun configure (adjustment: GtkAdjustment, climb_rate: Float, digits: Int) `{
+               gtk_spin_button_configure(recv, adjustment, climb_rate, digits);
        `}
 
-       fun adjustment : GtkAdjustment is extern `{
-               return gtk_spin_button_get_adjustment( recv );
+       fun adjustment: GtkAdjustment `{
+               return gtk_spin_button_get_adjustment(recv);
        `}
 
-       fun adjustment=( value : GtkAdjustment ) is extern `{
-               gtk_spin_button_set_adjustment( recv, value );
+       fun adjustment=(value: GtkAdjustment) `{
+               gtk_spin_button_set_adjustment(recv, value);
        `}
 
-       fun digits : Int is extern `{
-               return gtk_spin_button_get_digits( recv );
+       fun digits: Int `{
+               return gtk_spin_button_get_digits(recv);
        `}
 
-       fun digits=( nb_digits : Int ) is extern `{
-               gtk_spin_button_set_digits( recv, nb_digits );
+       fun digits=(nb_digits: Int) `{
+               gtk_spin_button_set_digits(recv, nb_digits);
        `}
 
-       fun value : Float is extern `{
-               return gtk_spin_button_get_value( recv );
+       fun value: Float `{
+               return gtk_spin_button_get_value(recv);
        `}
 
-       fun val=( val : Float ) is extern `{
-               gtk_spin_button_set_value( recv, val );
+       fun val=(val: Float) `{
+               gtk_spin_button_set_value(recv, val);
        `}
 
-       fun spin( direction : GtkSpinType, increment : Float ) is extern`{
-               gtk_spin_button_spin( recv, direction, increment );
+       fun spin(direction: GtkSpinType, increment: Float)`{
+               gtk_spin_button_spin(recv, direction, increment);
        `}
 end
 
-#enum GtkSpinType
-#The values of the GtkSpinType enumeration are used to specify the change to make in gtk_spin_button_spin().
-#@https://developer.gnome.org/gtk3/stable/GtkSpinButton.html#GtkSpinType
+# enum GtkSpinType
+# The values of the GtkSpinType enumeration are used to specify the change to make in gtk_spin_button_spin().
+# See: https://developer.gnome.org/gtk3/stable/GtkSpinButton.html#GtkSpinType
 extern class GtkSpinType `{GtkSpinType`}
-       #Increment by the adjustments step increment.
+       # Increment by the adjustments step increment.
        new step_forward `{ return GTK_SPIN_STEP_FORWARD; `}
 
-       #Decrement by the adjustments step increment.
+       # Decrement by the adjustments step increment.
        new step_backward `{ return GTK_SPIN_STEP_BACKWARD; `}
 
-       #Increment by the adjustments page increment.
+       # Increment by the adjustments page increment.
        new page_forward `{ return GTK_SPIN_PAGE_FORWARD; `}
 
-       #Decrement by the adjustments page increment.
+       # Decrement by the adjustments page increment.
        new page_backward `{ return GTK_SPIN_PAGE_BACKWARD; `}
 
-       #Go to the adjustments lower bound.
+       # Go to the adjustments lower bound.
        new lower_bound `{ return GTK_SPIN_HOME; `}
 
-       #Go to the adjustments upper bound.
+       # Go to the adjustments upper bound.
        new upper_bound `{ return GTK_SPIN_END; `}
 
-       #Change by a specified amount.
+       # Change by a specified amount.
        new user_defined `{ return GTK_SPIN_USER_DEFINED; `}
 end
 
-#A widget to unlock or lock privileged operations
-#@https://developer.gnome.org/gtk3/stable/GtkLockButton.html
+# A widget to unlock or lock privileged operations
+# See: https://developer.gnome.org/gtk3/stable/GtkLockButton.html
 extern class GtkLockButton
        super GtkButton
 end
 
-#A button to launch a color selection dialog
-#@https://developer.gnome.org/gtk3/stable/GtkColorButton.html
+# A button to launch a color selection dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkColorButton.html
 extern class GtkColorButton `{GtkColorButton *`}
        super GtkButton
 
-       new is extern `{
-               return (GtkColorButton *)gtk_color_button_new(  );
-       `}
-
-       fun color=( col : GdkColor ) is extern `{
-
-               /* deprecated
-               GdkColor *c = malloc(sizeof(GdkColor));
-               c->pixel = 50;
-               c->red = 50;
-               c->green = 50;
-               c->blue = 50;
-
-               gtk_color_button_set_color( (GtkColorButton*)recv, c );*/
+       new `{
+               return (GtkColorButton *)gtk_color_button_new();
        `}
 end
 
index bf082c7..db45724 100644 (file)
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module v3_4 is pkgconfig("gtk+-3.0")
+module v3_4 is pkgconfig "gtk+-3.0"
 
 import gtk_widgets_ext
 import gtk_dialogs
index c424996..036c2bb 100644 (file)
 # limitations under the License.
 
 # GTK+ services added at version 3.6
-module v3_6 is pkgconfig("gtk+-3.0")
+module v3_6 is pkgconfig "gtk+-3.0"
 
 import v3_4
 
-#An entry which shows a search icon
-#@https://developer.gnome.org/gtk3/stable/GtkSearchEntry.html
+# An entry which shows a search icon
+# See: https://developer.gnome.org/gtk3/stable/GtkSearchEntry.html
 extern class GtkSearchEntry `{GtkSearchEntry *`}
        super GtkEntry
 
-       new is extern `{
-               return (GtkSearchEntry *)gtk_search_entry_new( );       
+       new `{
+               return (GtkSearchEntry *)gtk_search_entry_new();
        `}
 end
index 540db18..16b4167 100644 (file)
@@ -21,7 +21,7 @@ import v3_6
 
 redef class GtkWidget
        # Get the visibility of the widget, check if it's parents are visible too
-       fun visible: Bool is extern `{
+       fun visible: Bool `{
                return gtk_widget_is_visible(recv);
        `}
 end
index 2020e30..6358430 100644 (file)
@@ -165,7 +165,7 @@ redef extern class JavaObject
 
        # Pops the current local reference frame and return a valid reference to self
        #
-       # Similiar to `JavaVM::pop_local_frame` but returns a value.
+       # Similar to `JavaVM::pop_local_frame` but returns a value.
        fun pop_from_local_frame: SELF
        do
                var jni_env = sys.jni_env
index 12dbc7c..1107973 100644 (file)
@@ -56,6 +56,34 @@ interface Jsonable
        #
        # SEE: `to_json`
        fun append_json(buffer: Buffer) do buffer.append(to_json)
+
+       # Pretty print JSON string.
+       #
+       # ~~~
+       # var obj = new JsonObject
+       # obj["foo"] = 1
+       # obj["bar"] = true
+       # var arr = new JsonArray
+       # arr.add 2
+       # arr.add false
+       # arr.add "baz"
+       # obj["baz"] = arr
+       # var res = obj.to_pretty_json
+       # var exp = """{
+       #       "foo": 1,
+       #       "bar": true,
+       #       "baz": [2, false, "baz"]
+       # }\n"""
+       # assert res == exp
+       # ~~~
+       fun to_pretty_json: String do
+               var res = new FlatBuffer
+               pretty_json_visit(res, 0)
+               res.add '\n'
+               return res.write_to_string
+       end
+
+       private fun pretty_json_visit(buffer: FlatBuffer, indent: Int) is abstract
 end
 
 redef class Text
@@ -96,8 +124,10 @@ redef class Text
 
        # Encode `self` in JSON.
        #
-       #     assert "\t\"http://example.com\"\r\n\0\\".to_json ==
-       #               "\"\\t\\\"http:\\/\\/example.com\\\"\\r\\n\\u0000\\\\\""
+       # ~~~
+       # assert "\t\"http://example.com\"\r\n\0\\".to_json ==
+       #     "\"\\t\\\"http:\\/\\/example.com\\\"\\r\\n\\u0000\\\\\""
+       # ~~~
        redef fun to_json do return to_json_by_append
 
        # Parse `self` as JSON.
@@ -225,6 +255,29 @@ interface JsonMapRead[K: String, V: nullable Jsonable]
        #     assert obj.to_json == "\{\"baz\":null\}"
        redef fun to_json do return to_json_by_append
 
+       redef fun pretty_json_visit(buffer, indent) do
+               buffer.append "\{\n"
+               indent += 1
+               var i = 0
+               for k, v in self do
+                       buffer.append "\t" * indent
+                       buffer.append "\"{k}\": "
+                       if v isa JsonObject or v isa JsonArray then
+                               v.pretty_json_visit(buffer, indent)
+                       else
+                               buffer.append v.to_json
+                       end
+                       if i < length - 1 then
+                               buffer.append ","
+                       end
+                       buffer.append "\n"
+                       i += 1
+               end
+               indent -= 1
+               buffer.append "\t" * indent
+               buffer.append "\}"
+       end
+
        private fun append_json_entry(iterator: MapIterator[String, nullable Jsonable],
                        buffer: Buffer) do
                buffer.append iterator.key.to_json
@@ -269,6 +322,21 @@ class JsonSequenceRead[E: nullable Jsonable]
        #     assert arr.to_json =="[]"
        redef fun to_json do return to_json_by_append
 
+       redef fun pretty_json_visit(buffer, indent) do
+               buffer.append "\["
+               var i = 0
+               for v in self do
+                       if v isa JsonObject or v isa JsonArray then
+                               v.pretty_json_visit(buffer, indent)
+                       else
+                               buffer.append v.to_json
+                       end
+                       if i < length - 1 then buffer.append ", "
+                       i += 1
+               end
+               buffer.append "\]"
+       end
+
        private fun append_json_entry(iterator: Iterator[nullable Jsonable],
                        buffer: Buffer) do
                buffer.append_json_of(iterator.item)
@@ -287,13 +355,15 @@ redef class JsonParseError
 
        # Get the JSON representation of `self`.
        #
-       #     var err = new JsonParseError("foo", new Position(1, 2, 3, 4, 5, 6))
-       #     assert err.to_json == "\{\"error\":\"JsonParseError\"," +
-       #               "\"position\":\{" +
-       #                       "\"pos_start\":1,\"pos_end\":2," +
-       #                       "\"line_start\":3,\"line_end\":4," +
-       #                       "\"col_start\":5,\"col_end\":6" +
-       #               "\},\"message\":\"foo\"\}"
+       # ~~~
+       # var err = new JsonParseError("foo", new Position(1, 2, 3, 4, 5, 6))
+       # assert err.to_json == "\{\"error\":\"JsonParseError\"," +
+       #               "\"position\":\{" +
+       #                       "\"pos_start\":1,\"pos_end\":2," +
+       #                       "\"line_start\":3,\"line_end\":4," +
+       #                       "\"col_start\":5,\"col_end\":6" +
+       #               "\},\"message\":\"foo\"\}"
+       # ~~~
        redef fun to_json do
                return "\{\"error\":\"JsonParseError\"," +
                                "\"position\":{position.to_json}," +
@@ -306,12 +376,14 @@ redef class Position
 
        # Get the JSON representation of `self`.
        #
-       #     var pos = new Position(1, 2, 3, 4, 5, 6)
-       #     assert pos.to_json == "\{" +
-       #                       "\"pos_start\":1,\"pos_end\":2," +
-       #                       "\"line_start\":3,\"line_end\":4," +
-       #                       "\"col_start\":5,\"col_end\":6" +
-       #               "\}"
+       # ~~~
+       # var pos = new Position(1, 2, 3, 4, 5, 6)
+       # assert pos.to_json == "\{" +
+       #                       "\"pos_start\":1,\"pos_end\":2," +
+       #                       "\"line_start\":3,\"line_end\":4," +
+       #                       "\"col_start\":5,\"col_end\":6" +
+       #               "\}"
+       # ~~~
        redef fun to_json do
                return "\{\"pos_start\":{pos_start},\"pos_end\":{pos_end}," +
                                "\"line_start\":{line_start},\"line_end\":{line_end}," +
similarity index 97%
rename from lib/linux/linux_data_store.nit
rename to lib/linux/data_store.nit
index 4393f4a..3a017dc 100644 (file)
@@ -14,7 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module linux_data_store
+# `app::data_store` implementation on GNU/Linux
+module data_store
 
 import app::data_store
 private import xdg_basedir
index b106d62..2fecee8 100644 (file)
@@ -18,4 +18,4 @@
 module linux
 
 import app
-private import linux_data_store
+private import data_store
index 10dbcc6..7b7d319 100644 (file)
@@ -244,7 +244,7 @@ class MarkdownProcessor
        #
        # Markdown allows link refs to be defined over two lines:
        #
-       #       [id]: http://example.com/longish/path/to/resource/here
+       #       [id]: http://example.com/longish/path/to/resource/here
        #               "Optional Title Here"
        #
        private var last_link_ref: nullable LinkRef = null
@@ -2000,7 +2000,7 @@ abstract class TokenLinkOrImage
                                comment = lr.title
                        end
                else
-               var tid = name.write_to_string.replace("\n", " ").to_lower
+                       var tid = name.write_to_string.replace("\n", " ").to_lower
                        if v.processor.link_refs.has_key(tid) then
                                var lr = v.processor.link_refs[tid]
                                link = lr.link
index 4d6ddfa..da2e33d 100644 (file)
@@ -20,7 +20,7 @@
 # In order to reproduce executions, the behavior of the application must be deterministic
 # for a given sequence of inputs.
 # The main source of differences in executions is caused by the `rand` function,
-# Set the environment variable `MNIT_SRAND` to a value to force srand to be initialized with this value.
+# Set the environment variable `NIT_SRAND` to a value to force srand to be initialized with this value.
 #
 # The input event file is made of event descriptions, one event by line.
 #
@@ -75,13 +75,6 @@ redef class App
 
        redef fun setup
        do
-               var env = "MNIT_SRAND".environ
-               if env != "" then
-                       srand_from(env.to_i)
-               else
-                       srand_from(0)
-               end
-
                var input = "MNIT_READ_INPUT".environ
                if input != "" then
                        injected_input_stream = new FileReader.open(input)
index eb1061b..b11d8dd 100644 (file)
@@ -55,17 +55,12 @@ in "C header" `{
 
        GLenum mnit_opengles_error_code;
 
-       struct mnit_opengles_Texture *mnit_opengles_load_image( const uint_least32_t *pixels, int width, int height, int has_alpha );
+       struct mnit_opengles_Texture *mnit_opengles_load_image(
+               const uint_least32_t *pixels, int width, int height,
+               int width_pow2, int height_pow2, int has_alpha);
 `}
 
 in "C" `{
-       #define LOGW(...) ((void)fprintf(stderr, "# warn: %s (%i)\n", __VA_ARGS__))
-       #ifdef DEBUG
-               #define LOGI(...) ((void)fprintf(stderr, "# info: %s (%i)\n", __VA_ARGS__))
-       #else
-               #define LOGI(...) (void)0
-       #endif
-
        extern NativeWindowType mnit_window;
        extern EGLNativeDisplayType mnit_native_display;
 
@@ -86,7 +81,9 @@ in "C" `{
                {1.0f, 0.0f}
        };
 
-       struct mnit_opengles_Texture *mnit_opengles_load_image( const uint_least32_t *pixels, int width, int height, int has_alpha )
+       struct mnit_opengles_Texture *mnit_opengles_load_image(
+               const uint_least32_t *pixels, int width, int height,
+               int width_pow2, int height_pow2, int has_alpha)
        {
                struct mnit_opengles_Texture *image = malloc(sizeof(struct mnit_opengles_Texture));
                int format = has_alpha? GL_RGBA: GL_RGB;
@@ -100,36 +97,37 @@ in "C" `{
 
                image->src_xo = 0;
                image->src_yo = 0;
-               image->src_xi = 1.0;
-               image->src_yi = 1.0;
+               image->src_xi = ((float)width)/width_pow2;
+               image->src_yi = ((float)height)/height_pow2;
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                       LOGW("error loading image after malloc", mnit_opengles_error_code);
+                       PRINT_ERROR("error loading image after malloc: %i", mnit_opengles_error_code);
                }
 
                glGenTextures(1, &image->texture);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                       LOGW("error loading image after glGenTextures", mnit_opengles_error_code);
+                       PRINT_ERROR("error loading image after glGenTextures: %i", mnit_opengles_error_code);
                }
 
                glBindTexture(GL_TEXTURE_2D, image->texture);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                       LOGW("error loading image glBindTexture", mnit_opengles_error_code);
+                       PRINT_ERROR("error loading image glBindTexture: %i", mnit_opengles_error_code);
                }
 
-               glTexImage2D(   GL_TEXTURE_2D, 0, format, width, height,
+               glTexImage2D(   GL_TEXTURE_2D, 0, format, width_pow2, height_pow2,
                                                0, format, GL_UNSIGNED_BYTE, (GLvoid*)pixels);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                       LOGW("error loading image after glTexImage2D", mnit_opengles_error_code);
+                       PRINT_ERROR("error loading image after glTexImage2D: %i", mnit_opengles_error_code);
                }
 
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                       LOGW("error loading image after gtTexParameter", mnit_opengles_error_code);
+                       PRINT_ERROR("error loading image after gtTexParameter: %i", mnit_opengles_error_code);
                }
 
                return image;
@@ -162,27 +160,27 @@ class Opengles1Display
 
                EGLDisplay display = eglGetDisplay(mnit_native_display);
                if ( display == EGL_NO_DISPLAY) {
-                       LOGW("Unable to eglGetDisplay", 0);
+                       PRINT_ERROR("Unable to eglGetDisplay");
                        return -1;
                }
 
                if ( eglInitialize(display, 0, 0) == EGL_FALSE) {
-                       LOGW("Unable to eglInitialize", 0);
+                       PRINT_ERROR("Unable to eglInitialize");
                        return -1;
                }
 
                if ( eglChooseConfig(display, attribs, &config, 1, &numConfigs) == EGL_FALSE) {
-                       LOGW("Unable to eglChooseConfig", 0);
+                       PRINT_ERROR("Unable to eglChooseConfig");
                        return -1;
                }
 
                if ( numConfigs == 0 ) {
-                       LOGW("No configs available for egl", 0);
+                       PRINT_ERROR("No configs available for egl");
                        return -1;
                }
 
                if ( eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format) == EGL_FALSE) {
-                       LOGW("Unable to eglGetConfigAttrib", 0);
+                       PRINT_ERROR("Unable to eglGetConfigAttrib");
                        return -1;
                }
 
@@ -193,7 +191,7 @@ class Opengles1Display
                context = eglCreateContext(display, config, NULL, NULL);
 
                if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
-                       LOGW("Unable to eglMakeCurrent", 0);
+                       PRINT_ERROR("Unable to eglMakeCurrent");
                        return -1;
                }
 
@@ -207,11 +205,6 @@ class Opengles1Display
                mnit_width = w;
                mnit_height = h;
 
-               LOGI("surface", (int)surface);
-               LOGI("display", (int)display);
-               LOGI("width", w);
-               LOGI("height", h);
-
                glViewport(0, 0, mnit_width, mnit_height);
                glMatrixMode(GL_PROJECTION);
                glLoadIdentity();
@@ -304,7 +297,7 @@ class Opengles1Display
                glDisable(GL_TEXTURE_2D);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                  LOGW("error drawing", mnit_opengles_error_code);
+                  PRINT_ERROR("error drawing: %i", mnit_opengles_error_code);
                }
        `}
 
@@ -354,7 +347,7 @@ class Opengles1Display
                glDisable(GL_TEXTURE_2D);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                  LOGW("error drawing", mnit_opengles_error_code);
+                  PRINT_ERROR("error drawing: %i", mnit_opengles_error_code);
                }
        `}
 
@@ -409,7 +402,7 @@ class Opengles1Display
                glDisable(GL_TEXTURE_2D);
 
                if ((mnit_opengles_error_code = glGetError()) != GL_NO_ERROR) {
-                  LOGW("error drawing", mnit_opengles_error_code);
+                  PRINT_ERROR("error drawing: %i", mnit_opengles_error_code);
                }
        `}
 
@@ -466,10 +459,12 @@ extern class Opengles1Image in "C" `{struct mnit_opengles_Texture *`}
                image->scale = recv->scale;
                image->blended = recv->blended;
 
-               image->src_xo = ((float)x)/recv->width;
-               image->src_yo = ((float)y)/recv->height;
-               image->src_xi = ((float)x+w)/recv->width;
-               image->src_yi = ((float)y+h)/recv->height;
+               float r_dx = recv->src_xi - recv->src_xo;
+               float r_dy = recv->src_yi - recv->src_yo;
+               image->src_xo = recv->src_xo + ((float)x)/recv->width*r_dx;
+               image->src_yo = recv->src_yo + ((float)y)/recv->height*r_dy;
+               image->src_xi = recv->src_xo + ((float)x+w)/recv->width*r_dx;
+               image->src_yi = recv->src_yo + ((float)y+h)/recv->height*r_dy;
 
                return Opengles1Image_as_Image( image );
     `}
index 8f61c90..1720c57 100644 (file)
@@ -86,7 +86,7 @@ redef class App
                var a = load_asset_from_apk(path)
                if a != null then
                        if path.file_extension == "png" then
-                               var png = new Opengles1Image.from_android_asset(a)      
+                               var png = new Opengles1Image.from_android_asset(a)
                                a.close
                                return png
                        else if path.file_extension == "txt" then
@@ -118,7 +118,7 @@ end
 
 redef class Opengles1Image
        # Read a png from a zipped stream
-       new from_android_asset(asset: AndroidAsset) is extern `{
+       new from_android_asset(asset: AndroidAsset) import Int.next_pow `{
                struct mnit_opengles_Texture *recv = NULL;
 
                png_structp png_ptr = NULL;
@@ -133,13 +133,16 @@ redef class Opengles1Image
                unsigned char *pixels = NULL;
                unsigned int i;
 
+               png_uint_32 width_pow2, height_pow2;
+               unsigned int row_bytes_pow2;
+
                unsigned char sig[8];
                int sig_read = AAsset_read(asset, sig, 8);
                if (png_sig_cmp(sig, 0, sig_read)) {
                        LOGW("invalide png signature");
                        return NULL;
                }
-               
+
                png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
                if (png_ptr == NULL) {
                        LOGW("png_create_read_struct failed");
@@ -176,11 +179,16 @@ redef class Opengles1Image
                        png_read_update_info(png_ptr, info_ptr);
                }
 
-               LOGW("w: %i, h: %i", width, height);
+               width_pow2 = Int_next_pow(width, 2);
+               height_pow2 = Int_next_pow(height, 2);
+
+               LOGW("Loading image of w: %i, h: %i, w2: %d, h2: %d",
+                       width, height, width_pow2, height_pow2);
 
                row_bytes = png_get_rowbytes(png_ptr, info_ptr);
-               pixels = malloc(row_bytes * height);
-               row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);
+               row_bytes_pow2 = row_bytes * width_pow2 / width;
+               pixels = malloc(row_bytes_pow2 * height_pow2);
+               row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height_pow2);
 
                for (i=0; i<height; i++)
                        row_pointers[i] = (png_byte*) malloc(row_bytes);
@@ -188,11 +196,16 @@ redef class Opengles1Image
                png_read_image(png_ptr, row_pointers);
 
                for (i = 0; i < height; i++)
-                       memcpy(pixels + (row_bytes*i),
-                                       row_pointers[i], row_bytes);
+                       memcpy(pixels + (row_bytes_pow2*i), row_pointers[i], row_bytes);
+
+               recv = mnit_opengles_load_image((const uint_least32_t *)pixels,
+                       width, height, width_pow2, height_pow2, has_alpha);
 
-               recv = mnit_opengles_load_image((const uint_least32_t *)pixels, width, height, has_alpha);
-               LOGW("OK");
+               // Calculate the size of the client-side memory allocated and freed
+               float size = ((float)row_bytes_pow2) * height_pow2/1024.0/1024.0;
+               static float total_size = 0;
+               total_size += size;
+               LOGI("Loaded OK %fmb out of %fmb", size, total_size);
 
        close_png_ptr:
                if (info_ptr != NULL)
@@ -213,3 +226,13 @@ redef class Opengles1Image
                return recv;
        `}
 end
+
+redef universal Int
+       # The first power of `exp` greater or equal to `self`
+       private fun next_pow(exp: Int): Int
+       do
+               var p = 0
+               while p < self do p = p*exp
+               return p
+       end
+end
index 106bc07..084abcc 100644 (file)
@@ -78,7 +78,9 @@ end
 
 redef extern class Opengles1Image
        new from_sdl_image( sdl_image: SDLImage ) is extern `{
-               return mnit_opengles_load_image( sdl_image->pixels, sdl_image->w, sdl_image->h, sdl_image->format->Amask );
+               return mnit_opengles_load_image( sdl_image->pixels,
+                       sdl_image->w, sdl_image->h,
+                       sdl_image->w, sdl_image->h, sdl_image->format->Amask );
        `}
 
        # using sdl
@@ -91,7 +93,9 @@ redef extern class Opengles1Image
                        fprintf(stderr, "SDL failed to load image <%s>: %s\n", String_to_cstring(path), IMG_GetError());
                        return NULL;
                } else {
-                       opengles_image = mnit_opengles_load_image( sdl_image->pixels, sdl_image->w, sdl_image->h, sdl_image->format->Amask );
+                       opengles_image = mnit_opengles_load_image( sdl_image->pixels,
+                               sdl_image->w, sdl_image->h,
+                               sdl_image->w, sdl_image->h, sdl_image->format->Amask );
                        SDL_FreeSurface(sdl_image);
                        return opengles_image;
                }
diff --git a/lib/mongodb/mongodb.nit b/lib/mongodb/mongodb.nit
new file mode 100644 (file)
index 0000000..4a0718f
--- /dev/null
@@ -0,0 +1,659 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+# MongoDB Nit Driver.
+#
+# This is actually a wrapper around the [MongoDB C Driver](http://api.mongodb.org/c/1.1.4/index.html).
+#
+# Usage:
+#
+# ~~~
+# # Opens the connexion with the Mongo server.
+# var client = new MongoClient("mongodb://localhost:27017/")
+#
+# # Retrieve a collection.
+# var col = client.database("test").collection("test")
+#
+# # Insert a document in the collection.
+# var doc = new JsonObject
+# doc["foo"] = 10
+# doc["bar"] = "bar"
+# doc["baz"] = new JsonArray
+# assert col.insert(doc)
+#
+# # Retrieve a document from the collection.
+# var query = new JsonObject
+# query["foo"] = 10
+# var res = col.find(query)
+# assert res["bar"] == "bar"
+# ~~~
+#
+# TODO Get last Object_ID
+module mongodb
+
+import json
+private import native_mongodb
+
+in "C header" `{
+       #include <mongoc.h>
+`}
+
+# Everything inside MongoDB is manipulated as BSON Objects.
+#
+# See:
+# * [Binary JSON spec](http://bsonspec.org/)
+# * [Libbson](http://api.mongodb.org/libbson/1.1.4/)#
+private class BSON
+       super Finalizable
+
+       # Native instance pointer.
+       var native: NativeBSON
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       var is_alive = true
+
+       # Returns a new BSON object initialized from the content of `json`.
+       #
+       # ~~~
+       # intrude import mongodb
+       # var obj = new JsonObject
+       # obj["age"] = 10
+       # obj["name"] = "Rick"
+       # obj["ELS"] = new JsonArray
+       # var bson = new BSON.from_json(obj)
+       # assert bson.to_s == """{ "age" : 10, "name" : "Rick", "ELS" : [  ] }"""
+       # ~~~
+       init from_json(json: JsonObject) do
+               init(new NativeBSON.from_json_string(json.to_json.to_cstring))
+       end
+
+       # Returns a new BSON object parsed from `json_string`.
+       #
+       # If `json_string` is not a valid JSON string, this initializer returns NULL.
+       #
+       # ~~~
+       # intrude import mongodb
+       # var str = """{ "age" : 10, "name" : "Rick", "ELS" : [  ] }"""
+       # var bson = new BSON.from_json_string(str)
+       # assert bson.to_s == str
+       # ~~~
+       init from_json_string(json_string: String) do
+               init(new NativeBSON.from_json_string(json_string.to_cstring))
+       end
+
+       redef fun to_s do
+               assert is_alive
+               var ns = native.to_native_string
+               var res = ns.to_s_with_copy
+               ns.free # manual free of gc allocated NativeString
+               return res
+       end
+
+       # Returns a new JsonObject from `self`.
+       #
+       # ~~~
+       # intrude import mongodb
+       # var str = """{ "age" : 10, "name" : "Rick", "ELS" : [  ] }"""
+       # var bson = new BSON.from_json_string(str)
+       # var json = bson.to_json
+       # assert json["age"] == 10
+       # assert json["name"] == "Rick"
+       # assert json["ELS"].as(JsonArray).is_empty
+       # ~~~
+       fun to_json: JsonObject do
+               assert is_alive
+               return to_s.parse_json.as(JsonObject)
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
+
+redef class JsonObject
+       # Inits `self` from a BSON object.
+       private init from_bson(bson: BSON) do recover_with(bson.to_json)
+
+       # Returns a new BSON object from `self`.
+       private fun to_bson: BSON do return new BSON.from_json(self)
+end
+
+# An error returned by the mongoc client.
+#
+# Within the client, if a method returns `false` or `null` it's more likely that
+# an error occured during the execution.
+#
+# See `MongoClient::last_error`.
+class MongoError
+
+       private var native: BSONError
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       # Logical domain within a library that created the error.
+       fun domain: Int do
+               assert is_alive
+               return native.domain
+       end
+
+       # Domain specific error code.
+       fun code: Int do
+               assert is_alive
+               return native.code
+       end
+
+       # Human readable error message.
+       fun message: String do
+               assert is_alive
+               var ns = native.message
+               var res = ns.to_s_with_copy
+               ns.free
+               return res
+       end
+
+       redef fun to_s do return "{message} (code: {code})"
+end
+
+# The MongoClient is used to connect to the mongo server and send queries.
+#
+# Usage:
+#
+# ~~~
+# var uri = "mongodb://localhost:27017/"
+# var client = new MongoClient(uri)
+# assert client.server_uri == uri
+# ~~~
+class MongoClient
+       super Finalizable
+
+       # Server URI.
+       var server_uri: String
+
+       private var native: NativeMongoClient is noinit
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       init do
+               native = new NativeMongoClient(server_uri.to_cstring)
+       end
+
+       # Gets server data.
+       #
+       # Returns `null` if an error occured. See `last_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # assert client.server_status["process"] == "mongod"
+       # ~~~
+       fun server_status: nullable JsonObject do
+               assert is_alive
+               var nbson = native.server_status
+               if nbson == null then return null
+               var bson = new BSON(nbson)
+               var res = new JsonObject.from_bson(bson)
+               return res
+       end
+
+       # Lists available database names.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # db.collection("test").insert(new JsonObject)
+       # assert client.database_names.has("test")
+       # ~~~
+       fun database_names: Array[String] do
+               assert is_alive
+               var res = new Array[String]
+               var nas = native.database_names
+               var i = 0
+               var name = nas[i]
+               while not name.address_is_null do
+                       res.add name.to_s_with_copy
+                       name.free
+                       i += 1
+                       name = nas[i]
+               end
+               return res
+       end
+
+       # Loads or creates a database from its `name`.
+       #
+       # Database are automatically created on the MongoDB server upon insertion of
+       # the first document into a collection.
+       # There is no need to create a database manually.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # assert client.database("test").name == "test"
+       # ~~~
+       fun database(name: String): MongoDb do
+               assert is_alive
+               return new MongoDb(self, name)
+       end
+
+       # Close the connexion and destroy the instance.
+       #
+       # The reference should not be used beyond this point!
+       fun close do
+               assert is_alive
+               finalize
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+
+       # Last error raised by mongoc.
+       fun last_error: nullable MongoError do
+               var last_error = sys.last_mongoc_error
+               if last_error == null then return null
+               return new MongoError(last_error)
+       end
+end
+
+# A MongoDb database.
+#
+# Database are automatically created on the MongoDB server upon insertion of the
+# first document into a collection.
+# There is no need to create a database manually.
+class MongoDb
+       super Finalizable
+
+       # `MongoClient` used to load this database.
+       var client: MongoClient
+
+       # The database name.
+       var name: String
+
+       private var native: NativeMongoDb is noinit
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       init do
+               native = new NativeMongoDb(client.native, name.to_cstring)
+       end
+
+       # Lists available collection names.
+       #
+       # Returns `null` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # db.collection("test").insert(new JsonObject)
+       # assert db.collection_names.has("test")
+       # ~~~
+       fun collection_names: Array[String] do
+               assert is_alive
+               var res = new Array[String]
+               var nas = native.collection_names
+               var i = 0
+               var name = nas[i]
+               while not name.address_is_null do
+                       res.add name.to_s_with_copy
+                       name.free
+                       i += 1
+                       name = nas[i]
+               end
+               return res
+       end
+
+       # Loads or creates a collection by its `name`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # var col = db.collection("test")
+       # assert col.name == "test"
+       # ~~~
+       fun collection(name: String): MongoCollection do
+               assert is_alive
+               return new MongoCollection(self, name)
+       end
+
+       # Checks if a collection named `name` exists.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # assert not db.has_collection("qwerty")
+       # ~~~
+       fun has_collection(name: String): Bool do
+               assert is_alive
+               # TODO handle error
+               return native.has_collection(name.to_cstring)
+       end
+
+       # Drop `self`, returns false if an error occured.
+       fun drop: Bool do
+               assert is_alive
+               return native.drop
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
+
+# A Mongo collection.
+#
+# Collections are automatically created on the MongoDB server upon insertion of
+# the first document.
+# There is no need to create a database manually.
+class MongoCollection
+       super Finalizable
+
+       # Database that collection belongs to.
+       var database: MongoDb
+
+       # Name of this collection.
+       var name: String
+
+       private var native: NativeMongoCollection is noinit
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       # Loads a collection.
+       #
+       # Call `MongoDb::collection` instead.
+       init do
+               native = new NativeMongoCollection(
+                       database.client.native,
+                       database.name.to_cstring,
+                       name.to_cstring)
+       end
+
+       # Inserts a new document in the collection.
+       #
+       # If no _id element is found in document, then a new one be generated locally
+       # and added to the document.
+       #
+       # Returns `false` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var doc = new JsonObject
+       # doc["foo"] = 10
+       # doc["bar"] = "bar"
+       # doc["baz"] = new JsonArray
+       # assert col.insert(doc)
+       # ~~~
+       fun insert(doc: JsonObject): Bool do
+               assert is_alive
+               return native.insert(doc.to_bson.native)
+       end
+
+       # Inserts multiple documents in the collection.
+       #
+       # See `insert`.
+       fun insert_all(docs: Collection[JsonObject]): Bool do
+               assert is_alive
+               var res = true
+               for doc in docs do res = insert(doc) and res
+               return res
+       end
+
+       # Saves a new document in the collection.
+       #
+       # If the document has an `_id` field it will be updated.
+       # Otherwise it will be inserted.
+       #
+       # Returns `false` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var doc = new JsonObject
+       # doc["foo"] = 10
+       # doc["bar"] = "bar"
+       # doc["baz"] = new JsonArray
+       # assert col.save(doc) # will be inserted
+       # ~~~
+       fun save(doc: JsonObject): Bool do
+               assert is_alive
+               return native.save(doc.to_bson.native)
+       end
+
+       # Removes the first document that matches `selector`.
+       #
+       # Returns `false` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var sel = new JsonObject
+       # sel["foo"] = 10
+       # assert col.remove(sel)
+       # ~~~
+       fun remove(selector: JsonObject): Bool do
+               assert is_alive
+               return native.remove(selector.to_bson.native)
+       end
+
+       # Removes all the document that match `selector`.
+       #
+       # See `remove`.
+       fun remove_all(selector: JsonObject): Bool do
+               assert is_alive
+               return native.remove_all(selector.to_bson.native)
+       end
+
+       # Updates a document already existing in the collection.
+       #
+       # No upsert is done, see `save` instead.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var sel = new JsonObject
+       # sel["foo"] = 10
+       # var upd = new JsonObject
+       # upd["bar"] = "BAR"
+       # assert col.update(sel, upd)
+       # ~~~
+       fun update(selector: JsonObject, update: JsonObject): Bool do
+               assert is_alive
+               return native.update(
+                       selector.to_bson.native,
+                       update.to_bson.native)
+       end
+
+       # Updates all documents matching the `selector`.
+       #
+       # See `update`.
+       fun update_all(selector: JsonObject, update: JsonObject): Bool do
+               return native.update_all(
+                       selector.to_bson.native,
+                       update.to_bson.native)
+       end
+
+       # Counts the document matching `query`.
+       #
+       # Returns `-1` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var query = new JsonObject
+       # query["foo"] = 10
+       # assert col.count(query) > 0
+       # ~~~
+       fun count(query: JsonObject): Int do
+               assert is_alive
+               return native.count(query.to_bson.native)
+       end
+
+       # Finds the first document that matches `query`.
+       #
+       # Returns `null` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var query = new JsonObject
+       # query["foo"] = 10
+       # var doc = col.find(query)
+       # print doc or else "nullllllllllllllllll"
+       # print doc.to_json
+       # assert doc["foo"] == 10
+       # ~~~
+       fun find(query: JsonObject): nullable JsonObject do
+               assert is_alive
+               var c = native.find(query.to_bson.native)
+               if c == null then return null
+               var cursor = new MongoCursor(c)
+               if cursor.is_ok then
+                       cursor.next
+                       return cursor.item
+               end
+               return null
+       end
+
+       # Finds all the documents matching the `query`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var query = new JsonObject
+       # query["foo"] = 10
+       # assert col.find_all(query).length > 0
+       # ~~~
+       fun find_all(query: JsonObject): Array[JsonObject] do
+               assert is_alive
+               var res = new Array[JsonObject]
+               var c = native.find(query.to_bson.native)
+               if c == null then return res
+               var cursor = new MongoCursor(c)
+               for item in cursor do res.add item
+               return res
+       end
+
+       # Retrieves statistics about the collection.
+       #
+       # Returns `null` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # assert col.stats["ns"] == "test.test"
+       # ~~~
+       fun stats: nullable JsonObject do
+               assert is_alive
+               var bson = native.stats
+               if bson == null then return null
+               return new JsonObject.from_bson(new BSON(bson))
+       end
+
+       # Drops `self`, returns false if an error occured.
+       fun drop: Bool do
+               assert is_alive
+               return native.drop
+       end
+
+       # Moves `self` to another `database`.
+       #
+       # The database will also be updated internally so it is safe to continue using
+       # this collection after the move.
+       # Additional operations will occur on moved collection.
+       fun move(database: MongoDb): Bool do
+               assert is_alive
+               self.database = database
+               return native.rename(database.name.to_cstring, name.to_cstring)
+       end
+
+       # Renames `self`.
+       #
+       # The name of the collection will also be updated internally so it is safe
+       # to continue using this collection after the rename.
+       # Additional operations will occur on renamed collection.
+       fun rename(name: String): Bool do
+               assert is_alive
+               self.name = name
+               return native.rename(database.name.to_cstring, name.to_cstring)
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
+
+# A MongoDB query cursor.
+#
+# It wraps up the wire protocol negotation required to initiate a query and
+# retreive an unknown number of documents.
+class MongoCursor
+       super Finalizable
+       super Iterator[JsonObject]
+
+       private var native: NativeMongoCursor
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       init do next
+
+       redef fun is_ok do
+               assert is_alive
+               return native.more
+       end
+
+       redef fun next do
+               assert is_alive
+               native.next
+       end
+
+       redef fun item do
+               assert is_alive
+               return new JsonObject.from_bson(new BSON(native.current))
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
diff --git a/lib/mongodb/native_mongodb.nit b/lib/mongodb/native_mongodb.nit
new file mode 100644 (file)
index 0000000..6608bc1
--- /dev/null
@@ -0,0 +1,492 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.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.
+
+# Native wrapper for the MongoDB C Driver
+#
+# See [mongoc](http://api.mongodb.org/c/1.1.4/index.html).
+module native_mongodb is pkgconfig "libmongoc-1.0"
+
+import c
+
+in "C header" `{
+       #include <mongoc.h>
+`}
+
+# Wrapper for `bson_t`.
+#
+# All data manipulated by `mongoc` are BSON formated.
+#
+# The `bson_t` structure represents a BSON document.
+# This structure manages the underlying BSON encoded buffer.
+# For mutable documents, it can append new data to the document.
+#
+# See [`bson_t`](http://api.mongodb.org/libbson/current/bson_t.html).
+extern class NativeBSON `{ bson_t * `}
+
+       # Wrapper for `bson_new()`.
+       #
+       # The `bson_new()` function shall create a new `bson_t` structure on the heap.
+       # It should be freed with `bson_destroy()` when it is no longer in use.
+       new `{ return bson_new(); `}
+
+       # Wrapper for `bson_new_from_json()`.
+       #
+       # The `bson_new_from_json()` function allocates and initialize a new `bson_t`
+       # by parsing the JSON found in `data`.
+       # Only a single JSON object may exist in data or an error will be set and
+       # `NULL` returned.
+       new from_json_string(data: NativeString) import set_mongoc_error `{
+               bson_error_t error;
+               bson_t *bson;
+               bson = bson_new_from_json(data, -1, &error);
+               if(!bson) {
+                       NativeBSON_set_mongoc_error(recv, &error);
+                       return NULL;
+               }
+               return bson;
+       `}
+
+       # Wrapper for `bson_as_json()`.
+       #
+       # The `bson_as_json()` function shall encode bson as a JSON encoded UTF-8 string.
+       # The caller is responsible for freeing the resulting UTF-8 encoded string
+       # by calling `bson_free()` with the result.
+       fun to_native_string: NativeString `{ return bson_as_json(recv, NULL); `}
+
+       # Wrapper for `bson_destroy()`.
+       #
+       # The `bson_destroy()` function shall free an allocated `bson_t` structure.
+       # This function should always be called when you are done with a `bson_t`
+       # unless otherwise specified.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ bson_destroy(recv); `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `bson_error_t`.
+#
+# The `bson_error_t` structure is used to encapsulate information about an error.
+#
+# See [`bson_error_t`](http://api.mongodb.org/libbson/current/bson_error_t.html).
+extern class BSONError `{ bson_error_t * `}
+
+       # Wrapper for `error.domain`.
+       #
+       # The `error.domain` field contains the logical domain within a library that
+       # created the error.
+       fun domain: Int `{ return recv->domain; `}
+
+       # Wrapper for `error.code`.
+       #
+       # The `error.code` field contains the domain specific error code.
+       fun code: Int `{ return recv->code; `}
+
+       # Wrapper for `error.message`.
+       #
+       # The `error.message` field contains a human printable error message.
+       fun message: NativeString `{ return recv->message; `}
+end
+
+redef class Sys
+       # Last error raised by `monogdb::MongoClient`.
+       #
+       # See `MongoClient::last_error`.
+       var last_mongoc_error: nullable BSONError = null
+end
+
+# Wrapper for `char**`.
+#
+# Used to handle array of NativeString returned by MongoDB.
+redef class NativeCStringArray
+       # Frees `self`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ free(recv); `}
+end
+
+# Wrapper for `mongoc_client_t`.
+#
+# `mongoc_client_t` is an opaque type that provides access to a MongoDB node,
+# replica-set, or sharded-cluster.
+# It maintains management of underlying sockets and routing to individual nodes.
+#
+# See [`mongoc_client_t`](http://api.mongodb.org/c/current/mongoc_client_t.html).
+extern class NativeMongoClient `{ mongoc_client_t * `}
+
+       # Wrapper for `mongoc_client_new()`.
+       #
+       # Creates a new `mongoc_client_t` using the `uri` string provided.
+       new(uri: NativeString) `{
+               mongoc_init();
+               return mongoc_client_new(uri);
+       `}
+
+       # Wrapper for `mongoc_client_get_server_status()`.
+       #
+       # Queries the server for the current server status.
+       # Returns `null` if an error occured.
+       fun server_status: nullable NativeBSON import set_mongoc_error, NativeBSON.as nullable `{
+               bson_error_t error;
+               bson_t *reply = bson_new();
+               if(!mongoc_client_get_server_status(recv, NULL, reply, &error)){
+                       NativeMongoClient_set_mongoc_error(recv, &error);
+                       return null_NativeBSON();
+               }
+               return NativeBSON_as_nullable(reply);
+       `}
+
+       # Wrapper for `mongoc_client_get_database_names()`.
+       #
+       # This function queries the MongoDB server for a list of known databases.
+       # Returns `null` if an error occured.
+       fun database_names: nullable NativeCStringArray
+               import set_mongoc_error, NativeCStringArray, NativeCStringArray.as nullable `{
+               bson_error_t error;
+               char **strv;
+               if(strv = mongoc_client_get_database_names(recv, &error)) {
+                       return NativeCStringArray_as_nullable(strv);
+               }
+               NativeMongoClient_set_mongoc_error(recv, &error);
+               return null_NativeCStringArray();
+       `}
+
+       # Wrapper for `mongoc_client_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{
+               mongoc_client_destroy(recv);
+               mongoc_cleanup();
+       `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `mongoc_database_t`.
+#
+# `mongoc_database_t` provides access to a MongoDB database.
+# This handle is useful for actions a particular database object.
+# It is not a container for `mongoc_collection_t` structures.
+#
+# See [`mongoc_database_t`](http://api.mongodb.org/c/current/mongoc_database_t.html).
+extern class NativeMongoDb `{ mongoc_database_t * `}
+
+       # Wrapper for `mongoc_client_get_database()`.
+       #
+       # Get a newly allocated `mongoc_database_t` for the database named name.
+       #
+       # Database are automatically created on the MongoDB server upon insertion of
+       # the first document into a collection.
+       # There is no need to create a database manually.
+       new(client: NativeMongoClient, db_name: NativeString) `{
+               return mongoc_client_get_database(client, db_name);
+       `}
+
+       # Wrapper for `mongoc_database_get_collection_names()`.
+       #
+       # Fetches a `NULL` terminated array of `NULL-byte` terminated `char*` strings
+       # containing the names of all of the collections in database.
+       fun collection_names: nullable NativeCStringArray
+               import set_mongoc_error, NativeCStringArray, NativeCStringArray.as nullable `{
+               bson_error_t error;
+               char **strv;
+               if(strv = mongoc_database_get_collection_names(recv, &error)) {
+                       return NativeCStringArray_as_nullable(strv);
+               }
+               NativeMongoDb_set_mongoc_error(recv, &error);
+               return null_NativeCStringArray();
+       `}
+
+       # Wrapper for `mongoc_database_get_collection()`.
+       #
+       # Allocates a new `mongoc_collection_t` structure for the collection named
+       # `name` in database.
+       fun collection(name: NativeString): NativeMongoCollection `{
+               return mongoc_database_get_collection(recv, name);
+       `}
+
+       # Wrapper for `mongoc_database_has_collection()`.
+       #
+       # This function checks to see if a collection exists on the MongoDB server
+       # within database.
+       fun has_collection(name: NativeString): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_database_has_collection(recv, name, &error)) {
+                       NativeMongoDb_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_database_drop()`.
+       #
+       # This function attempts to drop a database on the MongoDB server.
+       fun drop: Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_database_drop(recv, &error)) {
+                       NativeMongoDb_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_database_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ mongoc_database_destroy(recv); `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `mongoc_collection_t`.
+#
+# `mongoc_collection_t` provides access to a MongoDB collection.
+# This handle is useful for actions for most CRUD operations,
+# I.e. insert, update, delete, find, etc.
+#
+# It is an error to call `mongoc_collection_destroy()` on a collection that has
+# operations pending.
+# It is required that you release `mongoc_cursor_t` structures before calling
+# `mongoc_collection_destroy()`.
+#
+# See [`mongoc_collection_t`](http://api.mongodb.org/c/current/mongoc_collection_t.html).
+extern class NativeMongoCollection `{ mongoc_collection_t * `}
+
+       # Wrapper for `mongoc_client_get_collection()`.
+       #
+       # Get a newly allocated `mongoc_collection_t` for the collection named
+       # `collection` in the database named `db`.
+       #
+       # Collections are automatically created on the MongoDB server upon insertion
+       # of the first document.
+       # There is no need to create a collection manually.
+       new(client: NativeMongoClient, db, collection: NativeString) `{
+               return mongoc_client_get_collection(client, db, collection);
+       `}
+
+       # Wrapper for `mongoc_collection_insert()`.
+       #
+       # This function shall insert `document` into the collection.
+       # If no `_id` element is found in document, then a `bson_oid_t` will be
+       # generated locally and added to the document.
+       #
+       # You can retrieve a generated `_id` from `mongoc_collection_get_last_error()`.
+       fun insert(doc: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_insert(recv, MONGOC_INSERT_NONE, doc, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_save()`.
+       #
+       # This function shall save a document into the collection.
+       # If the document has an `_id` field it will be updated.
+       # Otherwise it will be inserted.
+       fun save(document: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_save(recv, document, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_remove(MONGOC_REMOVE_SINGLE_REMOVE)`.
+       #
+       # This function shall remove the first document in the collection that matches
+       # `selector`.
+       # The bson selector is not validated, simply passed along as appropriate to the server.
+       fun remove(selector: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_remove(recv, MONGOC_REMOVE_SINGLE_REMOVE, selector, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_remove(MONGOC_REMOVE_NONE)`.
+       #
+       # This function shall remove documents in the collection that match `selector`.
+       fun remove_all(selector: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_remove(recv, MONGOC_REMOVE_NONE, selector, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_update(MONGOC_UPDATE_NONE)`.
+       #
+       # This function shall update the first document in the collection that
+       # matches `selector`.
+       fun update(selector, update: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_update(recv, MONGOC_UPDATE_NONE, selector, update, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_update(MONGOC_UPDATE_MULTI_UPDATE)`.
+       #
+       # This function shall update documents in the collection that match `selector`.
+       fun update_all(selector, update: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_update(recv, MONGOC_UPDATE_MULTI_UPDATE, selector, update, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_count()`.
+       #
+       # This function shall execute a count `query` on the underlying collection.
+       fun count(query: NativeBSON): Int import set_mongoc_error `{
+               bson_error_t error;
+               int64_t count = mongoc_collection_count(recv, MONGOC_QUERY_NONE, query, 0, 0, NULL, &error);
+               if(count < 0) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return -1;
+               }
+               return count;
+       `}
+
+       # Wrapper for `mongoc_collection_find()`.
+       #
+       # This function shall execute a `query` on the underlying collection.
+       #
+       # If no options are necessary, `query` can simply contain a query such as `{a:1}`.
+       #
+       # If you would like to specify options such as a sort order,
+       # the query must be placed inside of `{"$query": {}}`.
+       fun find(query: NativeBSON): nullable NativeMongoCursor import
+               NativeMongoCursor.as nullable, set_mongoc_error `{
+               bson_error_t error;
+               mongoc_cursor_t *cursor;
+               cursor = mongoc_collection_find(recv, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
+
+               if (mongoc_cursor_error(cursor, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return null_NativeMongoCursor();
+               }
+
+               return NativeMongoCursor_as_nullable(cursor);
+       `}
+
+       # Wrapper for `mongoc_collection_stats()`.
+       #
+       # This function is a helper to retrieve statistics about the collection.
+       fun stats: nullable NativeBSON import set_mongoc_error, NativeBSON.as nullable `{
+               bson_error_t error;
+               bson_t *reply = bson_new();
+               if(!mongoc_collection_stats(recv, NULL, reply, &error)){
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return null_NativeBSON();
+               }
+               return NativeBSON_as_nullable(reply);
+       `}
+
+       # Wrapper for `mongoc_collection_drop()`.
+       #
+       # This function requests that the `collection` be dropped,
+       # including all indexes associated with the collection.
+       fun drop: Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_drop(recv, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_rename()`.
+       #
+       # This function is a helper to rename an existing collection on a MongoDB server.
+       # The name of the collection will also be updated internally so it is safe
+       # to continue using this collection after the rename.
+       # Additional operations will occur on renamed collection.
+       fun rename(new_database, new_name: NativeString): Bool `{
+               bson_error_t error;
+               if(!mongoc_collection_rename(recv, new_database, new_name, false, &error)){
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ mongoc_collection_destroy(recv); `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `mongoc_cursor_t`.
+#
+# `mongoc_cursor_t` provides access to a MongoDB query cursor.
+# It wraps up the wire protocol negotation required to initiate a query and
+# retreive an unknown number of documents.
+#
+# Cursors are lazy, meaning that no network traffic occurs until the first call
+# to mongoc_cursor_next().
+#
+# At that point we can:
+# * Retreive more records with repeated calls to `mongoc_cursor_next()`.
+# * Test for more records with `mongoc_cursor_more()`.
+# * Retrieve the document under the cursor with `mongoc_cursor_current()`.
+#
+# See [`mongoc_cursor_t`](http://api.mongodb.org/c/current/mongoc_cursor_t.html).
+extern class NativeMongoCursor `{ mongoc_cursor_t* `}
+
+       # Wrapper for `mongoc_cursor_current()`.
+       #
+       # Fetches the cursors current document or NULL if there has been an error.
+       fun current: NativeBSON `{ return (bson_t*) mongoc_cursor_current(recv); `}
+
+       # Wrapper for `mongoc_cursor_next()`.
+       #
+       # This function shall iterate the underlying cursor, setting `current` to the next
+       # document.
+       #
+       # This function is a blocking function.
+       fun next: Bool `{
+               const bson_t *doc;
+               return mongoc_cursor_next(recv, &doc);
+       `}
+
+       # Wrapper for `mongoc_cursor_more()`.
+       #
+       # This function shall indicate if there is more data to be read from the cursor.
+       fun more: Bool `{ return mongoc_cursor_more(recv); `}
+
+       # Wrapper for `mongoc_cursor_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ mongoc_cursor_destroy(recv); `}
+end
index 4a117b4..44f3754 100644 (file)
@@ -12,7 +12,12 @@ This group also provides two optional modules with thread-safe collections:
 Theses services are implemented using the POSIX threads.
 
 You can also use the `is threaded` annotation on methods, which makes them run on their own thread.
-Methods with return value or self calls are not supported.
+Methods with self calls are not supported.
+
+A method or function annotated with `is threaded` has its return value changed during compilation.
+You will get a subclass of `Thread`, even if there wasn't a return value before. You can know if the threaded method is done with the `is_done` boolean from `Thread`.
+A call to the `join` method will block the execution until the threaded method is done, or immediatly return if it's already done.
+`join` will return an object typed with the orginial return type, or `null` if there wasn't.
 
 ## Known limitations:
 
@@ -24,3 +29,4 @@ Methods with return value or self calls are not supported.
 
 * See: `man pthreads`
 * See: `examples/concurrent_array_and_barrier.nit`
+* See: ̀ examples/threaded_example.nit`
index 9a0af4b..fb0609b 100644 (file)
@@ -32,7 +32,17 @@ fun bar(i : Int, s : String) is threaded do
        print s
 end
 
+# Parameterized `threaded` method with a return type
+fun baz(i : Int, j : Int): Int is threaded do
+       sys.nanosleep(10, 0)
+       return i + j
+end
+
+print "main"
 foo
 bar(10, "parameterized and threaded")
-print "main"
 sys.nanosleep(5,0)
+var x  = baz(2, 3)
+print "main, waiting for baz"
+var y = x.join
+print("baz result : " + y.to_s)
index 8b8de1f..afb66d6 100644 (file)
@@ -236,19 +236,26 @@ end
 abstract class Thread
        super Finalizable
 
+       # Type returned by `main`
+       type E : nullable Object
+
        private var native: nullable NativePthread = null
 
+       # Is this thread finished ? True when main returned
+       var is_done = false
+
        # Main method of this thread
        #
        # The returned valued is passed to the caller of `join`.
-       fun main: nullable Object do return null
+       fun main: E do return null
 
-       private fun main_intern: nullable Object
+       private fun main_intern: E
        do
                # Register thread local data
                sys.self_thread_key.set self
-
-               return main
+               var r = main
+               self.is_done = true
+               return r
        end
 
        # Start executing this thread
@@ -266,12 +273,12 @@ abstract class Thread
        # `Sys::thread_exit`. Returns the object returned from the other thread.
        #
        # Stats the thread if now already done by a call to `start`.
-       fun join: nullable Object
+       fun join: E
        do
                if native == null then start
                var r = native.join
                native = null
-               return r
+               return r.as(E)
        end
 
        redef fun finalize
index 1b1e71e..2f7e454 100644 (file)
@@ -179,8 +179,9 @@ interface Collection[E]
        end
 end
 
-# Instances of the Iterator class generates a series of elements, one at a time.
-# They are mainly used with collections.
+# Iterators generate a series of elements, one at a time.
+#
+# They are mainly used with collections and obtained from `Collection::iterator`.
 interface Iterator[E]
        # The current item.
        # Require `is_ok`.
index 00c45a3..ca16460 100644 (file)
@@ -334,5 +334,25 @@ class DefaultComparator
        redef fun compare(a, b) do return a <=> b
 end
 
+# This comparator uses the operator `<=>` to compare objects in a reverse order.
+#
+# See `default_reverse_comparator` for an easy-to-use general stateless reverse
+# default comparator.
+class DefaultReverseComparator
+       super Comparator
+
+       redef type COMPARED: Comparable
+
+       # Returns `b <=> a`.
+       redef fun compare(a, b) do return b <=> a
+end
+
 # Easy-to-use general stateless default comparator that uses `<=>` to compare things.
 fun default_comparator: DefaultComparator do return once new DefaultComparator
+
+# Easy-to-use general stateless default reverse comparator.
+#
+# Does the same as `default_comparator` but in reverse order.
+fun default_reverse_comparator: DefaultReverseComparator do
+       return once new DefaultReverseComparator
+end
index 2f6ae46..0abe7f3 100644 (file)
@@ -60,3 +60,11 @@ redef class NativeString
        private fun get_environ: NativeString is extern "string_NativeString_NativeString_get_environ_0"
        private fun setenv( v : NativeString ) is extern "string_NativeString_NativeString_setenv_1"
 end
+
+redef class Sys
+       redef init
+       do
+               var x = "NIT_SRAND".environ
+               if x != "" then srand_from(x.to_i)
+       end
+end
index 2b55dca..9e1744f 100644 (file)
@@ -241,6 +241,11 @@ end
 redef class Collection[ E ]
        # Return a random element form the collection
        # There must be at least one element in the collection
+       #
+       # ~~~
+       # var x = [1,2,3].rand
+       # assert x == 1 or x == 2 or x == 3
+       # ~~~
        fun rand: E
        do
                if is_empty then abort
@@ -252,6 +257,19 @@ redef class Collection[ E ]
                end
                abort
        end
+
+       # Return a new array made of elements in a random order.
+       #
+       # ~~~
+       # var a = [1,2,1].to_shuffle
+       # assert a == [1,1,2] or a == [1,2,1] or a == [2,1,1]
+       # ~~~
+       fun to_shuffle: Array[E]
+       do
+               var res = self.to_a
+               res.shuffle
+               return res
+       end
 end
 
 redef class SequenceRead[E]
@@ -263,6 +281,36 @@ redef class SequenceRead[E]
        end
 end
 
+redef class AbstractArray[E]
+       # Reorder randomly the elements in self.
+       #
+       # ~~~
+       # var a = new Array[Int]
+       #
+       # a.shuffle
+       # assert a.is_empty
+       #
+       # a.add 1
+       # a.shuffle
+       # assert a == [1]
+       #
+       # a.add 2
+       # a.shuffle
+       # assert a == [1,2] or a == [2,1]
+       # ~~~
+       #
+       # ENSURE self.shuffle.has_exactly(old(self))
+       fun shuffle
+       do
+               for i in [0..length[ do
+                       var j = i + (length-i).rand
+                       var tmp = self[i]
+                       self[i] = self[j]
+                       self[j] = tmp
+               end
+       end
+end
+
 redef class Sys
        init
        do
index 7df1bd1..e0d3a67 100644 (file)
@@ -395,20 +395,18 @@ abstract class BufferedReader
        redef fun read(i)
        do
                if last_error != null then return ""
-               if _buffer.length == _buffer_pos then
-                       if not eof then
-                               return read(i)
-                       end
-                       return ""
-               end
-               if _buffer_pos + i >= _buffer.length then
-                       var from = _buffer_pos
-                       _buffer_pos = _buffer.length
-                       if from == 0 then return _buffer.to_s
-                       return _buffer.substring_from(from).to_s
+               if eof then return ""
+               var p = _buffer_pos
+               var bufsp = _buffer.length - p
+               if bufsp >= i then
+                       _buffer_pos += i
+                       return _buffer.substring(p, i).to_s
                end
-               _buffer_pos += i
-               return _buffer.substring(_buffer_pos - i, i).to_s
+               _buffer_pos = _buffer.length
+               var readln = _buffer.length - p
+               var s = _buffer.substring(p, readln).to_s
+               fill_buffer
+               return s + read(i - readln)
        end
 
        redef fun read_all
index cd2698c..5c9b2ef 100644 (file)
@@ -849,6 +849,39 @@ abstract class Text
                return hash_cache.as(not null)
        end
 
+       # Gives the formatted string back as a Nit string with `args` in place
+       #
+       #       assert "This %1 is a %2.".format("String", "formatted String") == "This String is a formatted String"
+       #       assert "\\%1 This string".format("String") == "\\%1 This string"
+       fun format(args: Object...): String do
+               var s = new Array[Text]
+               var curr_st = 0
+               var i = 0
+               while i < length do
+                       # Skip escaped characters
+                       if self[i] == '\\' then
+                               i += 1
+                       # In case of format
+                       else if self[i] == '%' then
+                               var fmt_st = i
+                               i += 1
+                               var ciph_st = i
+                               while i < length and self[i].is_numeric do
+                                       i += 1
+                               end
+                               i -= 1
+                               var fmt_end = i
+                               var ciph_len = fmt_end - ciph_st + 1
+                               s.push substring(curr_st, fmt_st - curr_st)
+                               s.push args[substring(ciph_st, ciph_len).to_i - 1].to_s
+                               curr_st = i + 1
+                       end
+                       i += 1
+               end
+               s.push substring(curr_st, length - curr_st)
+               return s.to_s
+       end
+
 end
 
 # All kinds of array-based text representations.
index 86d5e45..bb8dd13 100644 (file)
@@ -382,8 +382,10 @@ fun NitGitGrep()
        redraw!
 endfun
 
-" Activate the omnifunc on Nit files
-autocmd FileType nit set omnifunc=NitOmnifunc
+if !exists("g:nit_disable_omnifunc") || !g:nit_disable_omnifunc
+       " Activate the omnifunc on Nit files
+       autocmd FileType nit set omnifunc=NitOmnifunc
+endif
 
 " Define the user command Nitdoc for ease of use
 command -nargs=* Nitdoc call Nitdoc("<args>")
index 18a579a..9c3ede7 100644 (file)
@@ -131,31 +131,31 @@ hi def link NITFFIDelimiters              Keyword
 " FFI Python
 syntax include @FFIPython syntax/python.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"Python"/ nextgroup=NITFFIBlockPython skipwhite
+syn match NITFFILanguage       /\c"Python"\ze.*`{/ nextgroup=NITFFIBlockPython skipwhite
 syn region NITFFIBlockPython matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIPython
 
 " FFI Java
 syntax include @FFIJava syntax/java.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"Java\(\| inner\)"/ nextgroup=NITFFIBlockJava skipwhite
+syn match NITFFILanguage       /\c"Java\(\| inner\)"\ze.*`{/ nextgroup=NITFFIBlockJava skipwhite
 syn region NITFFIBlockJava matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIJava
 
 " FFI C++
 syntax include @FFICpp syntax/cpp.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"C++\(\| header\| body\)"/ nextgroup=NITFFIBlockCpp skipwhite
+syn match NITFFILanguage       /\c"C++\(\| header\| body\)"\ze.*`{/ nextgroup=NITFFIBlockCpp skipwhite
 syn region NITFFIBlockCpp matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFICpp
 
 " FFI Objective-C
 syntax include @FFIObjC syntax/objc.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"ObjC\(\| Header\| Body\)"/ nextgroup=NITFFIBlockObjC skipwhite
+syn match NITFFILanguage       /\c"ObjC\(\| Header\| Body\)"\ze.*`{/ nextgroup=NITFFIBlockObjC skipwhite
 syn region NITFFIBlockObjC matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIObjC
 
 " FFI C (the last one is the default)
 syntax include @FFIC syntax/c.vim
 unlet b:current_syntax
-syn match NITFFILanguage               /\c"C\(\| header\| body\)"/     nextgroup=NITFFIBlockC skipwhite
+syn match NITFFILanguage               /\c"C\(\| header\| body\)"\ze.*`{/      nextgroup=NITFFIBlockC skipwhite
 syn region NITFFIBlockC matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIC
 
 hi def link NITFFILanguage             Define
index 0864629..2a023e5 100644 (file)
@@ -25,6 +25,22 @@ nitpretty [*options*]... FILE
 `--check`
 :   Check format of Nit source files
 
+    This option creates a temporary pretty printed file then checks if the output
+    of the diff command on the source file and the pretty printed one is empty.
+
+`--break-strings`
+:   Break too long string literals
+
+`--inline-do`
+:   Force do keyword on the same line as the method signature
+
+`--skip-empty`
+:   Force formatting of empty lines
+
+    By default empty lines are kept as they were typed in the file.
+    When enabling this option, `nitpretty` will decide where to break lines and
+    will put empty lines to separate properties and code blocks.
+
 # SPECIFICATION
 
 The specification of the pretty printing is described here.
index 679272d..cd1c616 100644 (file)
@@ -1,7 +1,5 @@
 /*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
index 4a4ca86..b93a495 100644 (file)
Binary files a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.eot and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.eot differ
index e3e2dc7..94fb549 100644 (file)
 <font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
 <font-face units-per-em="1200" ascent="960" descent="-240" />
 <missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
 <glyph unicode=" " />
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
 <glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
 <glyph unicode="&#x2009;" horiz-adv-x="260" />
 <glyph unicode="&#x200a;" horiz-adv-x="72" />
 <glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
 <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
 </font>
 </defs></svg> 
\ No newline at end of file
index 67fa00b..1413fc6 100644 (file)
Binary files a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.ttf and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.ttf differ
index 8c54182..9e61285 100644 (file)
Binary files a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff differ
diff --git a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100644 (file)
index 0000000..64539b5
Binary files /dev/null and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ
index 850ba56..c8f82e5 100644 (file)
@@ -1,7 +1,7 @@
 /*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */
-
-+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed.bs.alert").remove()}var c=a(this),d=c.attr("data-target");d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));var e=a(d);b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close.bs.alert"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.one(a.support.transition.end,f).emulateTransitionEnd(150):f()};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){b=="loadingText"?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");c.prop("type")=="radio"&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f=typeof c=="object"&&c;e||d.data("bs.button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();if(b>this.$items.length-1||b<0)return;return this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){if(this.sliding)return;return this.slide("next")},b.prototype.prev=function(){if(this.sliding)return;return this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});this.$element.trigger(j);if(j.isDefaultPrevented())return;return this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(d.css("transition-duration").slice(0,-1)*1e3)):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),typeof c=="object"&&c),g=typeof c=="string"?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),typeof c=="number"?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),c.data()),g=c.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=c.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){function e(d){a(b).remove(),a(c).each(function(){var b=f(a(this)),c={relatedTarget:this};if(!b.hasClass("open"))return;b.trigger(d=a.Event("hide.bs.dropdown",c));if(d.isDefaultPrevented())return;b.removeClass("open").trigger("hidden.bs.dropdown",c)})}function f(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}"use strict";var b=".dropdown-backdrop",c="[data-toggle=dropdown]",d=function(b){a(b).on("click.bs.dropdown",this.toggle)};d.prototype.toggle=function(b){var c=a(this);if(c.is(".disabled, :disabled"))return;var d=f(c),g=d.hasClass("open");e();if(!g){"ontouchstart"in document.documentElement&&!d.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",e);var h={relatedTarget:this};d.trigger(b=a.Event("show.bs.dropdown",h));if(b.isDefaultPrevented())return;d.toggleClass("open").trigger("shown.bs.dropdown",h),c.focus()}return!1},d.prototype.keydown=function(b){if(!/(38|40|27)/.test(b.keyCode))return;var d=a(this);b.preventDefault(),b.stopPropagation();if(d.is(".disabled, :disabled"))return;var e=f(d),g=e.hasClass("open");if(!g||g&&b.keyCode==27)return b.which==27&&e.find(c).focus(),d.click();var h=" li:not(.divider):visible a",i=e.find("[role=menu]"+h+", [role=listbox]"+h);if(!i.length)return;var j=i.index(i.filter(":focus"));b.keyCode==38&&j>0&&j--,b.keyCode==40&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),e=c.data("bs.dropdown");e||c.data("bs.dropdown",e=new d(this)),typeof b=="string"&&e[b].call(c)})},a.fn.dropdown.Constructor=d,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",c,d.prototype.toggle).on("keydown.bs.dropdown.data-api",c+", [role=menu], [role=listbox]",d.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d);if(this.isShown||d.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)})},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]!==a.target&&!this.$element.has(a.target).length&&this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){a.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){if(a.target!==a.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),typeof c=="object"&&c);f||e.data("bs.modal",f=new b(this,g)),typeof c=="string"?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);var e=this.options.trigger.split(" ");for(var f=e.length;f--;){var g=e[f];if(g=="click")this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if(g!="manual"){var h=g=="hover"?"mouseenter":"focusin",i=g=="hover"?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(c.timeout),c.hoverState="in";if(!c.options.delay||!c.options.delay.show)return c.show();c.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(c.timeout),c.hoverState="out";if(!c.options.delay||!c.options.delay.hide)return c.hide();c.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);if(b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e=typeof this.options.placement=="function"?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n=this.options.container=="body"?window.innerWidth:k.outerWidth(),o=this.options.container=="body"?window.innerHeight:k.outerHeight(),p=this.options.container=="body"?0:k.offset().left;e=e=="bottom"&&h.top+h.height+j-m>o?"top":e=="top"&&h.top-m-j<0?"bottom":e=="right"&&h.right+i>n?"left":e=="left"&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;c=="top"&&k!=g&&(d=!0,b.top=b.top+g-k);if(/bottom|top/.test(c)){var l=0;b.left<0&&(l=b.left*-2,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function e(){b.hoverState!="in"&&c.detach(),b.$element.trigger("hidden.bs."+b.type)}var b=this,c=this.tip(),d=a.Event("hide.bs."+this.type);this.$element.trigger(d);if(d.isDefaultPrevented())return;return c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?c.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),this.hoverState=null,this},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},typeof b.getBoundingClientRect=="function"?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return a=="bottom"?{top:b.top+b.height,left:b.left+b.width/2-c/2}:a=="top"?{top:b.top-d,left:b.left+b.width/2-c/2}:a=="left"?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f=typeof c=="object"&&c;if(!e&&c=="destroy")return;e||d.data("bs.tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?typeof c=="string"?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||(typeof b.content=="function"?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f=typeof c=="object"&&c;if(!e&&c=="destroy")return;e||d.data("bs.popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});b.trigger(f);if(f.isDefaultPrevented())return;var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})},b.prototype.activate=function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g).emulateTransitionEnd(150):g(),e.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;this.affixed=="top"&&(e.top+=d),typeof f!="object"&&(h=g=f),typeof g=="function"&&(g=f.top(this.$element)),typeof h=="function"&&(h=f.bottom(this.$element));var i=this.unpin!=null&&d+this.unpin<=e.top?!1:h!=null&&e.top+this.$element.height()>=c-h?"bottom":g!=null&&d<=g?"top":!1;if(this.affixed===i)return;this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k);if(k.isDefaultPrevented())return;this.affixed=i,this.unpin=i=="bottom"?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),i=="bottom"&&this.$element.offset({top:c-h-this.$element.height()})};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f=typeof c=="object"&&c;e||d.data("bs.affix",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(this.transitioning||this.$element.hasClass("in"))return;var b=a.Event("show.bs.collapse");this.$element.trigger(b);if(b.isDefaultPrevented())return;var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])},b.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass("in"))return;var b=a.Event("hide.bs.collapse");this.$element.trigger(b);if(b.isDefaultPrevented())return;var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};if(!a.support.transition)return d.call(this);this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350)},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),typeof c=="object"&&c);!e&&f.toggle&&c=="show"&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":c.data(),i=c.attr("data-parent"),j=i&&a(i);if(!g||!g.transitioning)j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(c).addClass("collapsed"),c[f.hasClass("in")?"addClass":"removeClass"]("collapsed");f.collapse(h)})}(jQuery),+function(a){function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}"use strict",b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this,d=this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);if(f&&a<=d[0])return f!=(g=e[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f=typeof c=="object"&&c;e||d.data("bs.scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(a.style[c]!==undefined)return{end:b[c]};return!1}"use strict",a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery)
\ No newline at end of file
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
+var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
index 99c8763..7dafd2f 100644 (file)
@@ -244,7 +244,9 @@ redef class AIfExpr
                _n_kwif = new TKwif
                _n_expr = condition
                _n_expr.parent = self
+               _n_kwthen = new TKwthen
                _n_then = new ABlockExpr.make
+               _n_kwelse = new TKwelse
                _n_else = new ABlockExpr.make
                self.mtype = mtype
                self.is_typed = true
index 932f03d..df2ddd8 100644 (file)
@@ -47,33 +47,37 @@ class CCompilationUnit
        # files to compile TODO check is appropriate
        var files = new Array[String]
 
-       fun add_local_function( efc : CFunction )
+       # Add `c_function` as a `static` function local to this unit
+       fun add_local_function(c_function: CFunction)
        do
-               body_decl.add "static {efc.signature};\n"
+               body_decl.add "static {c_function.signature};\n"
                body_impl.add "\n"
-               body_impl.add efc.to_writer
+               body_impl.add c_function.to_writer
        end
 
-       fun add_exported_function( efc : CFunction )
+       # Add `c_function` as a public function to this unit
+       fun add_exported_function(c_function: CFunction)
        do
-               header_decl.add( "{efc.signature};\n" )
-               body_impl.add( "\n" )
-               body_impl.add( efc.to_writer )
+               header_decl.add "{c_function.signature};\n"
+               body_impl.add "\n"
+               body_impl.add c_function.to_writer
        end
 
-       fun compile_header_core( stream : Writer )
+       # Write the core of the header to `stream`
+       fun compile_header_core(stream: Writer)
        do
-               header_c_base.write_to( stream )
-               header_custom.write_to( stream )
-               header_c_types.write_to( stream )
-               header_decl.write_to( stream )
+               header_c_base.write_to stream
+               header_custom.write_to stream
+               header_c_types.write_to stream
+               header_decl.write_to stream
        end
 
-       fun compile_body_core( stream : Writer )
+       # Write the core of the body to `stream`
+       fun compile_body_core(stream: Writer)
        do
-               body_decl.write_to( stream )
-               body_custom.write_to( stream )
-               body_impl.write_to( stream )
+               body_decl.write_to stream
+               body_custom.write_to stream
+               body_impl.write_to stream
        end
 end
 
index f8cbee8..8d3f7db 100644 (file)
@@ -3121,6 +3121,13 @@ redef class AVarargExpr
        end
 end
 
+redef class ANamedargExpr
+       redef fun expr(v)
+       do
+               return v.expr(self.n_expr, null)
+       end
+end
+
 redef class ADebugTypeExpr
        redef fun stmt(v)
        do
similarity index 63%
rename from src/compiler/compiler_ffi.nit
rename to src/compiler/compiler_ffi/compiler_ffi.nit
index 42423f9..8b8f9de 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# FFI support for the compilers
+# Full FFI support for the compiler
 module compiler_ffi
 
-intrude import abstract_compiler
-intrude import ffi
+intrude import light
 import nitni
 
 redef class MModule
        private var foreign_callbacks = new ForeignCallbackSet
-       var nitni_ccu: nullable CCompilationUnit = null
-
-       private fun nmodule(v: AbstractCompilerVisitor): nullable AModule
-       do
-               return v.compiler.modelbuilder.mmodule2node(self)
-       end
 
        redef fun finalize_ffi(compiler: AbstractCompiler)
        do
                if not uses_ffi then return
 
-               var v = compiler.new_visitor
-               var n = nmodule(v)
-               if n == null then return
-               n.ensure_compile_ffi_wrapper
-               finalize_ffi_wrapper(v.compiler.modelbuilder.compile_dir, v.compiler.mainmodule)
-               for file in ffi_files do v.compiler.extern_bodies.add(file)
-
-               ensure_compile_nitni_base(v)
-
-               nitni_ccu.header_c_types.add("#include \"{c_name}._ffi.h\"\n")
-               nitni_ccu.header_c_types.add """
-extern void nitni_global_ref_incr(void*);
-extern void nitni_global_ref_decr(void*);
-"""
-
-               var cflags = self.cflags[""].join(" ")
-               nitni_ccu.write_as_nitni(self, v.compiler.modelbuilder.compile_dir)
-
-               for file in nitni_ccu.files do
-                       var f = new ExternCFile(file, cflags)
-                       f.pkgconfigs.add_all pkgconfigs
-                       v.compiler.extern_bodies.add(f)
-               end
+               super
 
-               # reset FFI things so the next compilation job, if any, starts with a clean context
-               # FIXME clean and rationalize this
-               nitni_ccu = null
-               compiled_ffi_methods.clear
-               ffi_ccu = null
-               ffi_files.clear
                compiled_callbacks.clear
                #Do not reset `foreign_callbacks` and `ffi_callbacks` because they are computed in previous phases
        end
 
-       private fun ensure_compile_nitni_base(v: AbstractCompilerVisitor)
-       do
-               if nitni_ccu != null then return
-
-               nitni_ccu = new CCompilationUnit
-       end
-
-       redef fun collect_linker_libs
-       do
-               if not self.ldflags.keys.has("") then return null
-               return self.ldflags[""]
-       end
-
        private var compiled_callbacks = new Array[NitniCallback]
 
        # Returns true if callbacks has yet to be generated and register it as being generated
@@ -93,23 +45,12 @@ extern void nitni_global_ref_decr(void*);
 end
 
 redef class AMethPropdef
-       private fun compile_ffi_support_to_c(v: AbstractCompilerVisitor)
+       redef fun compile_ffi_support_to_c(v)
        do
+               super
+
                var mmodule = mpropdef.mclassdef.mmodule
                var mainmodule = v.compiler.mainmodule
-               var amodule = v.compiler.modelbuilder.mmodule2node(mmodule)
-               var mclass_type = mpropdef.mclassdef.bound_mtype
-
-               # Declare as extern
-               var csignature = mpropdef.mproperty.build_csignature(mclass_type, mmodule, "___impl", long_signature, internal_call_context)
-               v.declare_once("{csignature};")
-
-               # FFI part
-               amodule.ensure_compile_ffi_wrapper
-               compile_ffi_method(mmodule)
-
-               # nitni - Compile missing callbacks
-               mmodule.ensure_compile_nitni_base(v)
                var ccu = mmodule.nitni_ccu.as(not null)
 
                for mtype in foreign_callbacks.types do
@@ -137,178 +78,71 @@ redef class AMethPropdef
                # manage nitni callback set
                mmodule.foreign_callbacks.join(foreign_callbacks)
        end
+end
 
-       redef fun compile_externmeth_to_c(v, mpropdef, arguments)
+redef class MExplicitCall
+       private fun compile_extern_callback(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
        do
-               # if using the old native interface fallback on previous implementation
-               if n_extern_code_block == null then return super
+               var mproperty = mproperty
+               assert mproperty isa MMethod
 
-               var mmodule = mpropdef.mclassdef.mmodule
-               mmodule.uses_ffi = true
+               # In nitni files, declare internal function as extern
+               var full_friendly_csignature = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
+               ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
-               var mclass_type = mpropdef.mclassdef.bound_mtype
+               if not compile_implementation_too then return
 
-               # Outgoing code in compiler
-               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
-               var recv_var: nullable RuntimeVariable = null
-               var return_mtype = mpropdef.msignature.return_mtype
-               if return_mtype != null then
-                       return_mtype = return_mtype.anchor_to(mmodule, mclass_type)
-                       recv_var = v.new_var(return_mtype)
-               end
+               # Internally, implement internal function
+               var nitni_visitor = v.compiler.new_visitor
+               nitni_visitor.frame = v.frame
+               var msignature = mproperty.lookup_first_definition(v.compiler.mainmodule, recv_mtype).msignature
+               var csignature_blind = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
 
-               v.adapt_signature(mpropdef, arguments)
-               v.unbox_signature_extern(mpropdef, arguments)
-
-               var arguments_for_c = new Array[String]
-               for a in [0..arguments.length[ do
-                       var arg = arguments[a]
-                       var param_mtype: MType
-                       if a == 0 then
-                               param_mtype = mpropdef.mclassdef.mclass.mclass_type
-                       else param_mtype = mpropdef.msignature.mparameters[a-1].mtype
-
-                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
-
-                       if param_mtype.is_cprimitive then
-                               arguments_for_c.add(arg.name)
-                       else
-                               v.add("struct nitni_instance* var_for_c_{a};")
-                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
-                               v.add("var_for_c_{a}->value = {arg.name};")
-                               arguments_for_c.add("var_for_c_{a}")
-                       end
-               end
+               nitni_visitor.add_decl("/* nitni callback for {mproperty.full_name} */")
+               nitni_visitor.add_decl("{csignature_blind} \{")
 
-               if recv_var == null then
-                       v.add("{externname}({arguments_for_c.join(", ")});")
+               var vars = new Array[RuntimeVariable]
+               var mtype: MType = recv_mtype
+               var recv_var = null
+               if mproperty.is_init then
+                       var recv_mtype = recv_mtype
+                       recv_var = nitni_visitor.init_instance_or_extern(recv_mtype)
+                       nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
+                       nitni_visitor.add("recv = {recv_var};")
                else
-                       assert return_mtype != null
-                       if return_mtype.is_cprimitive then
-                               v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
-                       else
-                               v.add("struct nitni_instance* ret_var;")
-                               v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
-                               v.add("{recv_var} = ret_var->value;")
-                       end
-                       recv_var = v.box_extern(recv_var, return_mtype)
-                       v.ret(recv_var)
+                       mtype = mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
+                       recv_var = nitni_visitor.var_from_c("recv", mtype)
+                       recv_var = nitni_visitor.box_extern(recv_var, mtype)
                end
 
-               compile_ffi_support_to_c(v)
-               return true
-       end
-
-       redef fun compile_externinit_to_c(v, mpropdef, arguments)
-       do
-               # if using the old native interface fallback on previous implementation
-               if n_extern_code_block == null then return super
-
-               var mmodule = mpropdef.mclassdef.mmodule
-               mmodule.uses_ffi = true
-
-               var mclass_type = mpropdef.mclassdef.bound_mtype
-
-               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
-               var return_mtype = arguments.first.mtype
-               var recv_var = v.new_var(return_mtype)
-
-               v.adapt_signature(mpropdef, arguments)
-               v.unbox_signature_extern(mpropdef, arguments)
-
-               arguments.shift
-
-               var arguments_for_c = new Array[String]
-               for a in [0..arguments.length[ do
-                       var arg = arguments[a]
-                       var param_mtype: MType
-                       param_mtype = mpropdef.msignature.mparameters[a].mtype
-                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
-
-                       if param_mtype.is_cprimitive then
-                               arguments_for_c.add(arg.name)
-                       else
-                               v.add("struct nitni_instance* var_for_c_{a};")
-                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
-                               v.add("var_for_c_{a}->value = {arg.name};")
-                               arguments_for_c.add("var_for_c_{a}")
-                       end
-               end
+               vars.add(recv_var)
 
-               if return_mtype.is_cprimitive then
-                       v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
-               else
-                       v.add("struct nitni_instance* ret_var;")
-                       v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
-                       v.add("{recv_var} = ret_var->value;")
+               for p in msignature.mparameters do
+                       var arg_mtype = p.mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
+                       var arg = nitni_visitor.var_from_c(p.name, arg_mtype)
+                       arg = nitni_visitor.box_extern(arg, arg_mtype)
+                       vars.add(arg)
                end
-               recv_var = v.box_extern(recv_var, return_mtype)
-               v.ret(recv_var)
 
-               compile_ffi_support_to_c(v)
-               return true
-       end
-end
-
-redef class CCompilationUnit
-       fun write_as_nitni(mmodule: MModule, compdir: String)
-       do
-               var base_name = "{mmodule.c_name}._nitni"
-
-               var h_file = "{base_name}.h"
-               write_header_to_file( mmodule, "{compdir}/{h_file}", new Array[String],
-                       "{mmodule.c_name.to_s.to_upper}_NITG_NITNI_H")
-
-               var c_file = "{base_name}.c"
-               write_body_to_file( mmodule, "{compdir}/{c_file}", ["\"{h_file}\""] )
-
-               files.add( "{compdir}/{c_file}" )
-       end
-end
-
-redef class AbstractCompiler
-       # Cache to avoid multiple compilation of NULL values
-       # see FIXME in `MNullableType#compile_extern_helper_functions`
-       private var compiled_null_types = new Array[MNullableType]
-end
+               var ret_var = nitni_visitor.send(mproperty, vars)
 
-redef class AbstractCompilerVisitor
-       # Create a `RuntimeVariable` for this C variable originating from C user code
-       private fun var_from_c(name: String, mtype: MType): RuntimeVariable
-       do
-               if mtype.is_cprimitive then
-                       return new RuntimeVariable(name, mtype, mtype)
-               else
-                       return new RuntimeVariable("{name}->value", mtype, mtype)
+               var return_mtype = msignature.return_mtype
+               if mproperty.is_init then
+                       if recv_mtype.mclass.kind != extern_kind then ret_var = recv_var
+                       return_mtype = recv_mtype
                end
-       end
-
-       # Return a `RuntimeVarible` to C user code
-       private fun ret_to_c(src: RuntimeVariable, mtype: MType)
-       do
-               if mtype.is_cprimitive then
-                       add("return {src};")
-               else
-                       add("struct nitni_instance* ret_for_c;")
-                       add("ret_for_c = nit_alloc(sizeof(struct nitni_instance));")
-                       add("ret_for_c->value = {src};")
-                       add("return ret_for_c;")
+               if return_mtype != null then
+                       assert ret_var != null
+                       return_mtype = return_mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
+                       ret_var = nitni_visitor.autobox(ret_var, return_mtype)
+                       ret_var = nitni_visitor.unbox_extern(ret_var, return_mtype)
+                       nitni_visitor.ret_to_c(ret_var, return_mtype)
                end
+               nitni_visitor.add("\}")
        end
 end
 
 redef class MType
-       private fun compile_extern_type(v: AbstractCompilerVisitor, ccu: CCompilationUnit)
-       do
-               assert not is_cprimitive
-
-               # define friendly type
-               ccu.header_c_types.add("#ifndef NIT_TYPE_{cname}\n")
-               ccu.header_c_types.add("#define NIT_TYPE_{cname} 1\n")
-               ccu.header_c_types.add("typedef struct nitni_instance *{cname};\n")
-               ccu.header_c_types.add("#endif\n")
-       end
-
        private fun compile_extern_helper_functions(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
        do
                # actually, we do not need to do anything when using the bohem garbage collector
@@ -362,68 +196,6 @@ redef class MNullableType
        end
 end
 
-redef class MExplicitCall
-       private fun compile_extern_callback(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
-       do
-               var mproperty = mproperty
-               assert mproperty isa MMethod
-
-               # In nitni files, declare internal function as extern
-               var full_friendly_csignature = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
-               ccu.header_decl.add("extern {full_friendly_csignature};\n")
-
-               if not compile_implementation_too then return
-
-               # Internally, implement internal function
-               var nitni_visitor = v.compiler.new_visitor
-               nitni_visitor.frame = v.frame
-               var msignature = mproperty.lookup_first_definition(v.compiler.mainmodule, recv_mtype).msignature
-               var csignature_blind = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
-
-               nitni_visitor.add_decl("/* nitni callback for {mproperty.full_name} */")
-               nitni_visitor.add_decl("{csignature_blind} \{")
-
-               var vars = new Array[RuntimeVariable]
-               var mtype: MType = recv_mtype
-               var recv_var = null
-               if mproperty.is_init then
-                       var recv_mtype = recv_mtype
-                       recv_var = nitni_visitor.init_instance_or_extern(recv_mtype)
-                       nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
-                       nitni_visitor.add("recv = {recv_var};")
-               else
-                       mtype = mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
-                       recv_var = nitni_visitor.var_from_c("recv", mtype)
-                       recv_var = nitni_visitor.box_extern(recv_var, mtype)
-               end
-
-               vars.add(recv_var)
-
-               for p in msignature.mparameters do
-                       var arg_mtype = p.mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
-                       var arg = nitni_visitor.var_from_c(p.name, arg_mtype)
-                       arg = nitni_visitor.box_extern(arg, arg_mtype)
-                       vars.add(arg)
-               end
-
-               var ret_var = nitni_visitor.send(mproperty, vars)
-
-               var return_mtype = msignature.return_mtype
-               if mproperty.is_init then
-                       if recv_mtype.mclass.kind != extern_kind then ret_var = recv_var
-                       return_mtype = recv_mtype
-               end
-               if return_mtype != null then
-                       assert ret_var != null
-                       return_mtype = return_mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
-                       ret_var = nitni_visitor.autobox(ret_var, return_mtype)
-                       ret_var = nitni_visitor.unbox_extern(ret_var, return_mtype)
-                       nitni_visitor.ret_to_c(ret_var, return_mtype)
-               end
-               nitni_visitor.add("\}")
-       end
-end
-
 redef class MExplicitSuper
        private fun compile_extern_callback(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
        do
diff --git a/src/compiler/compiler_ffi/light.nit b/src/compiler/compiler_ffi/light.nit
new file mode 100644 (file)
index 0000000..dbe819a
--- /dev/null
@@ -0,0 +1,281 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013-2015 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# 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.
+
+# Light FFI support for the compiler
+module light
+
+intrude import abstract_compiler
+intrude import ffi::light_ffi
+
+redef class MModule
+       # `CCompilationUnit` used for nitni signatures and code specific to the compiler
+       var nitni_ccu: nullable CCompilationUnit = null
+
+       private fun nmodule(v: AbstractCompilerVisitor): nullable AModule
+       do
+               return v.compiler.modelbuilder.mmodule2node(self)
+       end
+
+       redef fun finalize_ffi(compiler: AbstractCompiler)
+       do
+               if not uses_ffi then return
+
+               var v = compiler.new_visitor
+               var n = nmodule(v)
+               if n == null then return
+               n.ensure_compile_ffi_wrapper
+               finalize_ffi_wrapper(v.compiler.modelbuilder.compile_dir, v.compiler.mainmodule)
+               for file in ffi_files do v.compiler.extern_bodies.add(file)
+
+               ensure_compile_nitni_base(v)
+
+               nitni_ccu.header_c_types.add("#include \"{c_name}._ffi.h\"\n")
+               nitni_ccu.header_c_types.add """
+extern void nitni_global_ref_incr(void*);
+extern void nitni_global_ref_decr(void*);
+"""
+
+               var cflags = self.cflags[""].join(" ")
+               nitni_ccu.write_as_nitni(self, v.compiler.modelbuilder.compile_dir)
+
+               for file in nitni_ccu.files do
+                       var f = new ExternCFile(file, cflags)
+                       f.pkgconfigs.add_all pkgconfigs
+                       v.compiler.extern_bodies.add(f)
+               end
+
+               # reset FFI things so the next compilation job, if any, starts with a clean context
+               # FIXME clean and rationalize this
+               nitni_ccu = null
+               compiled_ffi_methods.clear
+               ffi_ccu = null
+               ffi_files.clear
+       end
+
+       private fun ensure_compile_nitni_base(v: AbstractCompilerVisitor)
+       do
+               if nitni_ccu != null then return
+
+               nitni_ccu = new CCompilationUnit
+       end
+
+       redef fun collect_linker_libs
+       do
+               if not self.ldflags.keys.has("") then return null
+               return self.ldflags[""]
+       end
+end
+
+redef class AMethPropdef
+       private fun compile_ffi_support_to_c(v: AbstractCompilerVisitor)
+       do
+               var mmodule = mpropdef.mclassdef.mmodule
+               var amodule = v.compiler.modelbuilder.mmodule2node(mmodule)
+               var mclass_type = mpropdef.mclassdef.bound_mtype
+
+               # Declare as extern
+               var csignature = mpropdef.mproperty.build_csignature(mclass_type, mmodule, "___impl", long_signature, internal_call_context)
+               v.declare_once("{csignature};")
+
+               # FFI part
+               amodule.ensure_compile_ffi_wrapper
+               compile_ffi_method(mmodule)
+
+               # nitni - Compile missing callbacks
+               mmodule.ensure_compile_nitni_base(v)
+       end
+
+       # Should we compile the extern method `self`?
+       #
+       # Returns false when restricting to the light FFI on methods using callbacks.
+       fun accept_externmeth: Bool do return true
+
+       redef fun compile_externmeth_to_c(v, mpropdef, arguments)
+       do
+               # if using the old native interface fallback on previous implementation
+               if n_extern_code_block == null then return super
+
+               if not accept_externmeth then return false
+
+               var mmodule = mpropdef.mclassdef.mmodule
+               mmodule.uses_ffi = true
+
+               var mclass_type = mpropdef.mclassdef.bound_mtype
+
+               # Outgoing code in compiler
+               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
+               var recv_var: nullable RuntimeVariable = null
+               var return_mtype = mpropdef.msignature.return_mtype
+               if return_mtype != null then
+                       return_mtype = return_mtype.anchor_to(mmodule, mclass_type)
+                       recv_var = v.new_var(return_mtype)
+               end
+
+               v.adapt_signature(mpropdef, arguments)
+               v.unbox_signature_extern(mpropdef, arguments)
+
+               var arguments_for_c = new Array[String]
+               for a in [0..arguments.length[ do
+                       var arg = arguments[a]
+                       var param_mtype: MType
+                       if a == 0 then
+                               param_mtype = mpropdef.mclassdef.mclass.mclass_type
+                       else param_mtype = mpropdef.msignature.mparameters[a-1].mtype
+
+                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
+
+                       if param_mtype.is_cprimitive then
+                               arguments_for_c.add(arg.name)
+                       else
+                               v.add("struct nitni_instance* var_for_c_{a};")
+                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
+                               v.add("var_for_c_{a}->value = {arg.name};")
+                               arguments_for_c.add("var_for_c_{a}")
+                       end
+               end
+
+               if recv_var == null then
+                       v.add("{externname}({arguments_for_c.join(", ")});")
+               else
+                       assert return_mtype != null
+                       if return_mtype.is_cprimitive then
+                               v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
+                       else
+                               v.add("struct nitni_instance* ret_var;")
+                               v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
+                               v.add("{recv_var} = ret_var->value;")
+                       end
+                       recv_var = v.box_extern(recv_var, return_mtype)
+                       v.ret(recv_var)
+               end
+
+               compile_ffi_support_to_c(v)
+               return true
+       end
+
+       redef fun compile_externinit_to_c(v, mpropdef, arguments)
+       do
+               # if using the old native interface fallback on previous implementation
+               if n_extern_code_block == null then return super
+
+               if not accept_externmeth then return false
+
+               var mmodule = mpropdef.mclassdef.mmodule
+               mmodule.uses_ffi = true
+
+               var mclass_type = mpropdef.mclassdef.bound_mtype
+
+               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
+               var return_mtype = arguments.first.mtype
+               var recv_var = v.new_var(return_mtype)
+
+               v.adapt_signature(mpropdef, arguments)
+               v.unbox_signature_extern(mpropdef, arguments)
+
+               arguments.shift
+
+               var arguments_for_c = new Array[String]
+               for a in [0..arguments.length[ do
+                       var arg = arguments[a]
+                       var param_mtype: MType
+                       param_mtype = mpropdef.msignature.mparameters[a].mtype
+                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
+
+                       if param_mtype.is_cprimitive then
+                               arguments_for_c.add(arg.name)
+                       else
+                               v.add("struct nitni_instance* var_for_c_{a};")
+                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
+                               v.add("var_for_c_{a}->value = {arg.name};")
+                               arguments_for_c.add("var_for_c_{a}")
+                       end
+               end
+
+               if return_mtype.is_cprimitive then
+                       v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
+               else
+                       v.add("struct nitni_instance* ret_var;")
+                       v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
+                       v.add("{recv_var} = ret_var->value;")
+               end
+               recv_var = v.box_extern(recv_var, return_mtype)
+               v.ret(recv_var)
+
+               compile_ffi_support_to_c(v)
+               return true
+       end
+end
+
+redef class CCompilationUnit
+       # Compile a `_nitni` files, used to implement nitni features for the compiler
+       fun write_as_nitni(mmodule: MModule, compdir: String)
+       do
+               var base_name = "{mmodule.c_name}._nitni"
+
+               var h_file = "{base_name}.h"
+               write_header_to_file( mmodule, "{compdir}/{h_file}", new Array[String],
+                       "{mmodule.c_name.to_s.to_upper}_NITG_NITNI_H")
+
+               var c_file = "{base_name}.c"
+               write_body_to_file( mmodule, "{compdir}/{c_file}", ["\"{h_file}\""] )
+
+               files.add( "{compdir}/{c_file}" )
+       end
+end
+
+redef class AbstractCompiler
+       # Cache to avoid multiple compilation of NULL values
+       # see FIXME in `MNullableType#compile_extern_helper_functions`
+       private var compiled_null_types = new Array[MNullableType]
+end
+
+redef class AbstractCompilerVisitor
+       # Create a `RuntimeVariable` for this C variable originating from C user code
+       private fun var_from_c(name: String, mtype: MType): RuntimeVariable
+       do
+               if mtype.is_cprimitive then
+                       return new RuntimeVariable(name, mtype, mtype)
+               else
+                       return new RuntimeVariable("{name}->value", mtype, mtype)
+               end
+       end
+
+       # Return a `RuntimeVarible` to C user code
+       private fun ret_to_c(src: RuntimeVariable, mtype: MType)
+       do
+               if mtype.is_cprimitive then
+                       add("return {src};")
+               else
+                       add("struct nitni_instance* ret_for_c;")
+                       add("ret_for_c = nit_alloc(sizeof(struct nitni_instance));")
+                       add("ret_for_c->value = {src};")
+                       add("return ret_for_c;")
+               end
+       end
+end
+
+redef class MType
+       private fun compile_extern_type(v: AbstractCompilerVisitor, ccu: CCompilationUnit)
+       do
+               assert not is_cprimitive
+
+               # define friendly type
+               ccu.header_c_types.add("#ifndef NIT_TYPE_{cname}\n")
+               ccu.header_c_types.add("#define NIT_TYPE_{cname} 1\n")
+               ccu.header_c_types.add("typedef struct nitni_instance *{cname};\n")
+               ccu.header_c_types.add("#endif\n")
+       end
+end
diff --git a/src/compiler/compiler_ffi/light_only.nit b/src/compiler/compiler_ffi/light_only.nit
new file mode 100644 (file)
index 0000000..3fc162d
--- /dev/null
@@ -0,0 +1,26 @@
+# 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.
+
+# Compiler support for the light FFI only, detects unsupported usage of callbacks
+module light_only
+
+import light
+
+redef class MClassType
+       redef fun cname_normal_class do return "void*"
+end
+
+redef class AMethPropdef
+       redef fun accept_externmeth do return n_extern_calls == null
+end
index 34e7be4..3e7fbcb 100644 (file)
@@ -1436,13 +1436,14 @@ class SeparateCompilerVisitor
                if compiler.modelbuilder.toolcontext.opt_invocation_metrics.value then add("count_invoke_by_tables++;")
 
                assert arguments.length == mmethod.intro.msignature.arity + 1 else debug("Invalid arity for {mmethod}. {arguments.length} arguments given.")
-               var recv = arguments.first
 
                var res0 = before_send(mmethod, arguments)
 
                var runtime_function = mmethod.intro.virtual_runtime_function
                var msignature = runtime_function.called_signature
 
+               adapt_signature(mmethod.intro, arguments)
+
                var res: nullable RuntimeVariable
                var ret = msignature.return_mtype
                if ret == null then
@@ -1451,18 +1452,7 @@ class SeparateCompilerVisitor
                        res = self.new_var(ret)
                end
 
-               var ss = new FlatBuffer
-
-               ss.append("{recv}")
-               for i in [0..msignature.arity[ do
-                       var a = arguments[i+1]
-                       var t = msignature.mparameters[i].mtype
-                       if i == msignature.vararg_rank then
-                               t = arguments[i+1].mcasttype
-                       end
-                       a = self.autobox(a, t)
-                       ss.append(", {a}")
-               end
+               var ss = arguments.join(", ")
 
                var const_color = mentity.const_color
                var ress
index 66ef564..0a011e8 100644 (file)
@@ -73,7 +73,7 @@ redef class MModulePage
                        end
                end
                op.append("\}\n")
-               return new GraphArticle(mentity, name, op)
+               return new GraphArticle(mentity, name, "Importation Graph", op)
        end
 end
 
@@ -107,7 +107,7 @@ redef class MClassPage
                        end
                end
                op.append("\}\n")
-               return new GraphArticle(mentity, name, op)
+               return new GraphArticle(mentity, name, "Inheritance Graph", op)
        end
 end
 
@@ -121,6 +121,9 @@ class GraphArticle
        # Graph ID (used for outputing file with names).
        var id: String
 
+       # Graph title to display.
+       var graph_title: String
+
        # Dot script of the graph.
        var dot: Text
 end
index 83b02f9..156a650 100644 (file)
@@ -133,8 +133,8 @@ class RenderHTMLPhase
 
        end
 
-       # A source link template for a given location
-       fun tpl_showsource(location: nullable Location): nullable String
+       # Returns a HTML link for a given `location`.
+       fun html_source_link(location: nullable Location): nullable String
        do
                if location == null then return null
                var source = ctx.opt_source.value
@@ -170,9 +170,9 @@ redef class DocPage
 
                # build page
                init_title(v, doc)
-               init_sidebar(v, doc)
                init_topmenu(v, doc)
                init_content(v, doc)
+               init_sidebar(v, doc)
 
                # piwik tracking
                var tracker_url = v.ctx.opt_piwik_tracker.value
@@ -192,14 +192,7 @@ redef class DocPage
        # Build top menu template if any.
        fun init_topmenu(v: RenderHTMLPhase, doc: DocModel) do
                topmenu = new DocTopMenu
-               var brand = v.ctx.opt_custom_brand.value
-               if brand != null then
-                       var tpl = new Template
-                       tpl.add "<span class='navbar-brand'>"
-                       tpl.add brand
-                       tpl.add "</span>"
-                       topmenu.brand = tpl
-               end
+               topmenu.brand = v.ctx.opt_custom_brand.value
                var title = "Overview"
                if v.ctx.opt_custom_title.value != null then
                        title = v.ctx.opt_custom_title.value.to_s
@@ -211,11 +204,14 @@ redef class DocPage
 
        # Build page sidebar if any.
        fun init_sidebar(v: RenderHTMLPhase, doc: DocModel) do
-               sidebar = new TplSidebar
+               sidebar = new DocSideBar
+               sidebar.boxes.add new DocSideBox("Summary", html_toc)
        end
 
        # Build page content template.
-       fun init_content(v: RenderHTMLPhase, doc: DocModel) do end
+       fun init_content(v: RenderHTMLPhase, doc: DocModel) do
+               root.init_html_render(v, doc, self)
+       end
 end
 
 redef class OverviewPage
@@ -227,36 +223,6 @@ redef class OverviewPage
                        title = v.ctx.opt_custom_title.value.to_s
                end
        end
-
-       # TODO this should be done in StructurePhase.
-       redef fun init_content(v, doc) do
-               # intro text
-               var section = new TplSection.with_title("overview", title)
-               var article = new TplArticle("intro")
-               if v.ctx.opt_custom_intro.value != null then
-                       article.content = v.ctx.opt_custom_intro.value.to_s
-               end
-               section.add_child article
-               # Projects list
-               var mprojects = doc.model.mprojects.to_a
-               var sorter = new MConcernRankSorter
-               sorter.sort mprojects
-               var ssection = new TplSection.with_title("projects", "Projects")
-               for mproject in mprojects do
-                       var sarticle = mproject.tpl_article
-                       sarticle.subtitle = mproject.tpl_declaration
-                       sarticle.content = mproject.tpl_definition
-                       var mdoc = mproject.mdoc_or_fallback
-                       if mdoc != null then
-                               sarticle.content = mdoc.tpl_short_comment
-                       end
-                       ssection.add_child sarticle
-               end
-               section.add_child ssection
-               self.add_section section
-       end
-
-       redef fun init_sidebar(v, doc) do sidebar = new TplSidebar
 end
 
 redef class SearchPage
@@ -269,64 +235,11 @@ redef class SearchPage
        end
 
        redef fun init_sidebar(v, doc) do end
-
-       # TODO this should be done in StructurePhase.
-       redef fun init_content(v, doc) do
-               var tpl = new TplSearchPage("search_all")
-               var section = new TplSection("search")
-               # title
-               tpl.title = "Index"
-               # modules list
-               for mmodule in modules_list(v, doc) do
-                       tpl.modules.add mmodule.tpl_link
-               end
-               # classes list
-               for mclass in classes_list(v, doc) do
-                       tpl.classes.add mclass.tpl_link
-               end
-               # properties list
-               for mproperty in mprops_list(v, doc) do
-                       var m = new Template
-                       m.add mproperty.intro.tpl_link
-                       m.add " ("
-                       m.add mproperty.intro.mclassdef.mclass.tpl_link
-                       m.add ")"
-                       tpl.props.add m
-               end
-               section.add_child tpl
-               self.add_section section
-       end
-
-       # Extract mmodule list to display (sorted by name)
-       private fun modules_list(v: RenderHTMLPhase, doc: DocModel): Array[MModule] do
-               var sorted = new Array[MModule]
-               for mmodule in doc.model.mmodule_importation_hierarchy do
-                       if mmodule.is_fictive or mmodule.is_test_suite then continue
-                       sorted.add mmodule
-               end
-               v.name_sorter.sort(sorted)
-               return sorted
-       end
-
-       # Extract mclass list to display (sorted by name)
-       private fun classes_list(v: RenderHTMLPhase, doc: DocModel): Array[MClass] do
-               var sorted = doc.mclasses.to_a
-               v.name_sorter.sort(sorted)
-               return sorted
-       end
-
-       # Extract mproperty list to display (sorted by name)
-       private fun mprops_list(v: RenderHTMLPhase, doc: DocModel): Array[MProperty] do
-               var sorted = doc.mproperties.to_a
-               v.name_sorter.sort(sorted)
-               return sorted
-       end
 end
 
 redef class MEntityPage
        redef var html_url is lazy do return mentity.nitdoc_url
        redef fun init_title(v, doc) do title = mentity.html_name
-       redef fun init_content(v, doc) do add_section root.start_rendering(v, doc, self)
 end
 
 # FIXME all clases below are roughly copied from `doc_pages` and adapted to new
@@ -350,27 +263,28 @@ redef class MGroupPage
                mclasses.add_all intros
                mclasses.add_all redefs
                if mclasses.is_empty then return
-               var list = new TplList.with_classes(["list-unstyled", "list-labeled"])
-
+               var list = new UnorderedList
+               list.css_classes.add "list-unstyled list-labeled"
                var sorted = mclasses.to_a
                v.name_sorter.sort(sorted)
                for mclass in sorted do
                        list.add_li tpl_sidebar_item(mclass)
                end
-               sidebar.boxes.add new TplSideBox.with_content("All classes", list)
+               sidebar.boxes.add new DocSideBox("All classes", list)
+               sidebar.boxes.last.is_open = false
        end
 
-       private fun tpl_sidebar_item(def: MClass): TplListItem do
-               var classes = def.intro.tpl_css_classes.to_a
+       private fun tpl_sidebar_item(def: MClass): ListItem do
+               var classes = def.intro.css_classes
                if intros.has(def) then
                        classes.add "intro"
                else
                        classes.add "redef"
                end
                var lnk = new Template
-               lnk.add new TplLabel.with_classes(classes)
-               lnk.add def.tpl_link
-               return new TplListItem.with_content(lnk)
+               lnk.add new DocHTMLLabel.with_classes(classes)
+               lnk.add def.html_link
+               return new ListItem(lnk)
        end
 end
 
@@ -391,27 +305,29 @@ redef class MModulePage
                mclasses.add_all mentity.filter_intro_mclasses(v.ctx.min_visibility)
                mclasses.add_all mentity.filter_redef_mclasses(v.ctx.min_visibility)
                if mclasses.is_empty then return
-               var list = new TplList.with_classes(["list-unstyled", "list-labeled"])
+               var list = new UnorderedList
+               list.css_classes.add "list-unstyled list-labeled"
 
                var sorted = mclasses.to_a
                v.name_sorter.sort(sorted)
                for mclass in sorted do
                        list.add_li tpl_sidebar_item(mclass)
                end
-               sidebar.boxes.add new TplSideBox.with_content("All classes", list)
+               sidebar.boxes.add new DocSideBox("All classes", list)
+               sidebar.boxes.last.is_open = false
        end
 
-       private fun tpl_sidebar_item(def: MClass): TplListItem do
-               var classes = def.intro.tpl_css_classes.to_a
+       private fun tpl_sidebar_item(def: MClass): ListItem do
+               var classes = def.intro.css_classes
                if def.intro_mmodule == self.mentity then
                        classes.add "intro"
                else
                        classes.add "redef"
                end
                var lnk = new Template
-               lnk.add new TplLabel.with_classes(classes)
-               lnk.add def.tpl_link
-               return new TplListItem.with_content(lnk)
+               lnk.add new DocHTMLLabel.with_classes(classes)
+               lnk.add def.html_link
+               return new ListItem(lnk)
        end
 end
 
@@ -428,47 +344,68 @@ redef class MClassPage
        redef fun init_sidebar(v, doc) do
                super
                var by_kind = new PropertiesByKind.with_elements(mclass_inherited_mprops(v, doc))
-               var summary = new TplList.with_classes(["list-unstyled"])
+               var summary = new UnorderedList
+               summary.css_classes.add "list-unstyled"
 
                by_kind.sort_groups(v.name_sorter)
                for g in by_kind.groups do tpl_sidebar_list(g, summary)
-               sidebar.boxes.add new TplSideBox.with_content("All properties", summary)
+               sidebar.boxes.add new DocSideBox("All properties", summary)
+               sidebar.boxes.last.is_open = false
        end
 
-       private fun tpl_sidebar_list(mprops: PropertyGroup[MProperty], summary: TplList) do
+       private fun tpl_sidebar_list(mprops: PropertyGroup[MProperty], summary: UnorderedList) do
                if mprops.is_empty then return
-               var entry = new TplListItem.with_content(mprops.title)
-               var list = new TplList.with_classes(["list-unstyled", "list-labeled"])
+               var list = new UnorderedList
+               list.css_classes.add "list-unstyled list-labeled"
                for mprop in mprops do
                        list.add_li tpl_sidebar_item(mprop)
                end
-               entry.append list
-               summary.elts.add entry
+               var content = new Template
+               content.add mprops.title
+               content.add list
+               var li = new ListItem(content)
+               summary.add_li li
        end
 
-       private fun tpl_sidebar_item(mprop: MProperty): TplListItem do
-               var classes = mprop.intro.tpl_css_classes.to_a
+       private fun tpl_sidebar_item(mprop: MProperty): ListItem do
+               var classes = mprop.intro.css_classes
                if not mprop_is_local(mprop) then
                        classes.add "inherit"
                        var cls_url = mprop.intro.mclassdef.mclass.nitdoc_url
-                       var def_url = "{cls_url}#{mprop.nitdoc_id}"
-                       var lnk = new TplLink(def_url, mprop.html_name)
+                       var def_url = "{cls_url}#article:{mprop.nitdoc_id}.definition"
+                       var lnk = new Link(def_url, mprop.html_name)
                        var mdoc = mprop.intro.mdoc_or_fallback
                        if mdoc != null then lnk.title = mdoc.short_comment
                        var item = new Template
-                       item.add new TplLabel.with_classes(classes)
+                       item.add new DocHTMLLabel.with_classes(classes)
                        item.add lnk
-                       return new TplListItem.with_content(item)
+                       return new ListItem(item)
                end
                if mpropdefs.has(mprop.intro) then
                        classes.add "intro"
                else
                        classes.add "redef"
                end
+               var def = select_mpropdef(mprop)
+               var anc = def.html_link_to_anchor
+               anc.href = "#article:{def.nitdoc_id}.definition"
                var lnk = new Template
-               lnk.add new TplLabel.with_classes(classes)
-               lnk.add mprop.tpl_anchor
-               return new TplListItem.with_content(lnk)
+               lnk.add new DocHTMLLabel.with_classes(classes)
+               lnk.add anc
+               return new ListItem(lnk)
+       end
+
+       # Get the mpropdef contained in `self` page for a mprop.
+       #
+       # FIXME this method is used to translate a mprop into a mpropdefs for
+       # section linking. A better page structure should avoid this...
+       private fun select_mpropdef(mprop: MProperty): MPropDef do
+               for mclassdef in mentity.mclassdefs do
+                       for mpropdef in mclassdef.mpropdefs do
+                               if mpropdef.mproperty == mprop then return mpropdef
+                       end
+               end
+               abort # FIXME is there a case where the prop is not found?
        end
 
        private fun mclass_inherited_mprops(v: RenderHTMLPhase, doc: DocModel): Set[MProperty] do
@@ -496,7 +433,7 @@ end
 
 redef class MPropertyPage
        redef fun init_title(v, doc) do
-               title = "{mentity.html_name}{mentity.tpl_signature.write_to_string}"
+               title = "{mentity.html_name}{mentity.html_short_signature.write_to_string}"
        end
 
        redef fun init_topmenu(v, doc) do
@@ -512,309 +449,142 @@ redef class MPropertyPage
 end
 
 redef class DocComposite
-       # Render this DocComposite as HTML.
+       # Prepares the HTML rendering for this element.
        #
-       # FIXME needed to maintain TplSection compatibility.
-       fun render(v: RenderHTMLPhase, doc: DocModel, page: MEntityPage, parent: TplSectionElt) is abstract
+       # This visit is mainly used to set template attributes before rendering.
+       fun init_html_render(v: RenderHTMLPhase, doc: DocModel, page: DocPage) do
+               for child in children do child.init_html_render(v, doc, page)
+       end
 end
 
-redef class DocRoot
-
-       # Start the rendering from root.
-       #
-       # FIXME needed to maintain TplSection compatibility.
-       fun start_rendering(v: RenderHTMLPhase, doc: DocModel, page: MEntityPage): TplSection do
-               var section = new TplSection("top")
-               var mentity = page.mentity
-               section.title = mentity.html_name
-               section.subtitle = mentity.tpl_declaration
-               # FIXME ugly hack to avoid diff
+# FIXME hideous hacks to avoid diff
+redef class MEntitySection
+       redef fun init_html_render(v, doc, page) do
+               if not page isa MEntityPage then return
+               var mentity = self.mentity
                if mentity isa MGroup and mentity.is_root then
-                       section.title = mentity.mproject.html_name
-                       section.subtitle = mentity.mproject.tpl_declaration
+                       html_title = mentity.mproject.html_name
+                       html_subtitle = mentity.mproject.html_declaration
                else if mentity isa MProperty then
-                       section.title = "{mentity.html_name}{mentity.intro.tpl_signature.write_to_string}"
-                       section.subtitle = mentity.tpl_namespace
-                       section.summary_title = mentity.html_name
-               end
-               render(v, doc, page, section)
-               return section
-       end
-
-       redef fun render(v, doc, page, parent) do
-               for child in children do
-                       child.render(v, doc, page, parent)
+                       var title = new Template
+                       title.add mentity.html_name
+                       title.add mentity.html_signature
+                       html_title = title
+                       html_subtitle = mentity.html_namespace
+                       toc_title = mentity.html_name
                end
+               super
        end
 end
 
+# FIXME hideous hacks to avoid diff
 redef class ConcernSection
-       redef fun render(v, doc, page, parent) do
-               var section = new TplSection(mentity.nitdoc_id)
+       redef fun init_html_render(v, doc, page) do
+               if not page isa MEntityPage then return
                var mentity = self.mentity
-               # FIXME hideous hacks to avoid diff
-               if page.mentity isa MModule and mentity isa MModule then
-                       render_concern_mmodule(page, section, mentity)
-               else if page.mentity isa MClass and mentity isa MModule then
-                       render_concern_other(page, section, mentity)
-               else if page.mentity isa MProperty and mentity isa MModule then
-                       render_concern_other(page, section, mentity)
-               end
-               for child in children do
-                       child.render(v, doc, page, section)
-               end
-               parent.add_child section
-       end
-
-       private fun render_concern_mmodule(page: MEntityPage, section: TplSection, mmodule: MModule) do
-               var title = new Template
-               if mmodule == page.mentity then
+               if page isa MGroupPage then
+                       html_title = null
+                       toc_title = mentity.html_name
+                       is_toc_hidden = false
+               else if page.mentity isa MModule and mentity isa MModule then
+                       var title = new Template
+                       if mentity == page.mentity then
+                               title.add "in "
+                               toc_title = "in {mentity.html_name}"
+                       else
+                               title.add "from "
+                               toc_title = "from {mentity.html_name}"
+                       end
+                       title.add mentity.html_namespace
+                       html_title = title
+               else if (page.mentity isa MClass and mentity isa MModule) or
+                               (page.mentity isa MProperty and mentity isa MModule) then
+                       var title = new Template
                        title.add "in "
-                       section.summary_title = "in {mmodule.html_name}"
-               else
-                       title.add "from "
-                       section.summary_title = "from {mmodule.html_name}"
+                       title.add mentity.html_namespace
+                       html_title = title
+                       toc_title = "in {mentity.html_name}"
                end
-               title.add mmodule.tpl_namespace
-               section.title = title
-       end
-
-       private fun render_concern_other(page: MEntityPage, section: TplSection, mmodule: MModule) do
-               var title = new Template
-               title.add "in "
-               title.add mmodule.tpl_namespace
-               section.title = title
-               section.summary_title = "in {mmodule.html_name}"
-       end
-end
-
-redef class MEntitySection
-       redef fun render(v, doc, page, parent) do
-               for child in children do child.render(v, doc, page, parent)
+               super
        end
 end
 
+# TODO redo showlink
 redef class IntroArticle
-       redef fun render(v, doc, page, parent) do
-               var article = new TplArticle("intro")
+       redef fun init_html_render(v, doc, page) do
                var mentity = self.mentity
                if mentity isa MModule then
-                       article.source_link = v.tpl_showsource(mentity.location)
+                       html_source_link = v.html_source_link(mentity.location)
                else if mentity isa MClassDef then
-                       article.source_link = v.tpl_showsource(mentity.location)
+                       html_source_link = v.html_source_link(mentity.location)
                else if mentity isa MPropDef then
-                       article.source_link = v.tpl_showsource(mentity.location)
+                       html_source_link = v.html_source_link(mentity.location)
                end
-               # article.subtitle = mentity.tpl_declaration
-               # FIXME diff hack
-               if mentity isa MProperty then
-                       # intro title
-                       var ns = mentity.intro.mclassdef.mmodule.tpl_namespace
-                       var section = new TplSection("intro")
-                       var title = new Template
-                       title.add "Introduction in "
-                       title.add ns
-                       section.title = title
-                       section.summary_title = "Introduction"
-                       var intro = mentity.intro.tpl_article
-                       intro.source_link = v.tpl_showsource(mentity.intro.location)
-                       section.add_child intro
-                       parent.add_child section
-               else
-                       article.content = mentity.tpl_definition
-                       parent.add_child article
-               end
-       end
-end
-
-redef class ConcernsArticle
-       redef fun render(v, doc, page, parent) do
-               # FIXME diff hack
-               var title = "concerns"
-               if page.mentity isa MProperty then title = "Concerns"
-               parent.add_child new TplArticle.
-                       with_content(title, "Concerns", concerns.to_tpl)
        end
 end
 
+# FIXME less hideous hacks...
 redef class DefinitionArticle
-       redef fun render(v, doc, page, parent) do
-               var article: TplArticle
+       redef fun init_html_render(v, doc, page) do
                var mentity = self.mentity
-               # FIXME hideous hacks...
-               if mentity isa MModule then
-                       article = mentity.tpl_article
-                       article.subtitle = mentity.tpl_declaration
-                       article.content = mentity.tpl_definition
-               else if mentity isa MClass then
-                       article = make_mclass_article(v, page)
-               else if mentity isa MClassDef then
-                       article = make_mclassdef_article(v, page)
-                       article.source_link = v.tpl_showsource(mentity.location)
-               else if mentity isa MPropDef and page.mentity isa MClass then
-                       article = make_mpropdef_article(v, doc, page)
-               else
-                       article = mentity.tpl_article
-                       article.subtitle = mentity.tpl_declaration
-                       if mentity isa MPropDef then
-                               article.source_link = v.tpl_showsource(mentity.location)
-                       end
-                       if not mentity isa MVirtualTypeProp then
-                               # article.content = mentity.tpl_comment
-                       end
-               end
-               for child in children do
-                       child.render(v, doc, page, article)
-               end
-               parent.add_child article
-       end
-
-       # FIXME avoid diff while preserving TplArticle compatibility.
-
-       private fun make_mclass_article(v: RenderHTMLPhase, page: MEntityPage): TplArticle do
-               var article = mentity.tpl_article
-               article.subtitle = mentity.tpl_namespace
-               article.content = null
-               return article
-       end
-
-       private fun make_mclassdef_article(v: RenderHTMLPhase, page: MEntityPage): TplArticle do
-               var mclassdef = mentity.as(MClassDef)
-               var article = mentity.tpl_article
-               if mclassdef.is_intro and mclassdef.mmodule != page.mentity then
-                       article = mentity.tpl_short_article
-               end
-               var title = new Template
-               title.add "in "
-               title.add mclassdef.mmodule.tpl_namespace
-               article.subtitle = title
-               return article
-       end
-
-       private fun make_mpropdef_article(v: RenderHTMLPhase, doc: DocModel, page: MEntityPage): TplArticle
-       do
-               var mpropdef = mentity.as(MPropDef)
-               var mprop = mpropdef.mproperty
-               var article = new TplArticle(mprop.nitdoc_id)
-               var title = new Template
-               title.add mprop.tpl_icon
-               title.add "<span id='{mpropdef.nitdoc_id}'></span>"
-               if mpropdef.is_intro then
-                       title.add mprop.tpl_link
-                       title.add mprop.intro.tpl_signature
-               else
-                       var cls_url = mprop.intro.mclassdef.mclass.nitdoc_url
-                       var def_url = "{cls_url}#{mprop.nitdoc_id}"
-                       var lnk = new TplLink.with_title(def_url, mprop.html_name,
-                                       "Go to introduction")
-                       title.add "redef "
-                       title.add lnk
-               end
-               article.title = title
-               article.title_classes.add "signature"
-               article.summary_title = "{mprop.html_name}"
-               article.subtitle = mpropdef.tpl_namespace
-               if mpropdef.mdoc_or_fallback != null then
-                       article.content = mpropdef.mdoc_or_fallback.tpl_comment
-               end
-               # TODO move in its own phase? let's see after doc_template refactoring.
-               # Add linearization
-               var all_defs = new HashSet[MPropDef]
-               for local_def in local_defs(page.as(MClassPage), mprop) do
-                       all_defs.add local_def
-                       var smpropdef = local_def
-                       while not smpropdef.is_intro do
-                               smpropdef = smpropdef.lookup_next_definition(
-                                       doc.mainmodule, smpropdef.mclassdef.bound_mtype)
-                               all_defs.add smpropdef
+               if mentity isa MProject or mentity isa MModule then
+                       var title = new Template
+                       title.add mentity.html_icon
+                       title.add mentity.html_namespace
+                       html_title = title
+                       toc_title = mentity.html_name
+                       if mentity isa MModule then
+                               html_source_link = v.html_source_link(mentity.location)
                        end
-               end
-               var lin = all_defs.to_a
-               doc.mainmodule.linearize_mpropdefs(lin)
-               if lin.length > 1 then
-                       var lin_article = new TplArticle("{mpropdef.nitdoc_id}.lin")
-                       lin_article.title = "Inheritance"
-                       var lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
-                       for smpropdef in lin do
-                               lst.add_li smpropdef.tpl_inheritance_item
+               else if mentity isa MClassDef then
+                       var title = new Template
+                       title.add "in "
+                       title.add mentity.mmodule.html_namespace
+                       html_title = mentity.html_declaration
+                       html_subtitle = title
+                       toc_title = "in {mentity.html_name}"
+                       html_source_link = v.html_source_link(mentity.location)
+                       if page isa MEntityPage and mentity.is_intro and mentity.mmodule != page.mentity then
+                               is_short_comment = true
                        end
-                       lin_article.content = lst
-                       article.add_child lin_article
-               end
-               return article
-       end
-
-       # Filter `page.mpropdefs` for this `mpropertie`.
-       #
-       # FIXME compatability with current templates.
-       private fun local_defs(page: MClassPage, mproperty: MProperty): HashSet[MPropDef] do
-               var mpropdefs = new HashSet[MPropDef]
-               for mpropdef in page.mpropdefs do
-                       if mpropdef.mproperty == mproperty then
-                               mpropdefs.add mpropdef
+                       if page isa MModulePage then is_toc_hidden = true
+               else if mentity isa MPropDef then
+                       if page isa MClassPage then
+                               var title = new Template
+                               title.add mentity.html_icon
+                               title.add mentity.html_declaration
+                               html_title = title
+                               html_subtitle = mentity.html_namespace
+                               toc_title = mentity.html_name
+                       else
+                               var title = new Template
+                               title.add "in "
+                               title.add mentity.mclassdef.html_link
+                               html_title = title
+                               toc_title = "in {mentity.mclassdef.html_name}"
                        end
+                       html_source_link = v.html_source_link(mentity.location)
                end
-               return mpropdefs
-       end
-end
-
-redef class IntrosRedefsListArticle
-       redef fun render(v, doc, page, parent) do
-               if mentities.is_empty then return
-               var title = list_title
-               # FIXME diff hack
-               var id = "intros"
-               if title == "Redefines" then id = "redefs"
-               var article = new TplArticle.with_title("{mentity.nitdoc_id}.{id}", title)
-               var list = new TplList.with_classes(["list-unstyled", "list-labeled"])
-               for mentity in mentities do
-                       list.add_li mentity.tpl_list_item
+               if page isa MGroupPage and mentity isa MModule then
+                       is_toc_hidden = true
                end
-               article.content = list
-               parent.add_child article
-       end
-end
-
-# FIXME compatibility with doc_templates.
-redef class ImportationListSection
-       redef fun render(v, doc, page, parent) do
-               var section = new TplSection.with_title("dependencies", "Dependencies")
-               for child in children do
-                       child.render(v, doc, page, section)
-               end
-               parent.add_child section
-       end
-end
-
-# FIXME compatibility with doc_templates.
-redef class InheritanceListSection
-       redef fun render(v, doc, page, parent) do
-               var section = new TplSection.with_title("inheritance", "Inheritance")
-               for child in children do
-                       child.render(v, doc, page, section)
-               end
-               parent.add_child section
+               super
        end
 end
 
-# FIXME compatibility with doc_templates.
-redef class HierarchyListArticle
-       redef fun render(v, doc, page, parent) do
-               if mentities.is_empty then return
-               var title = list_title
-               var id = list_title.to_lower
-               var article = new TplArticle.with_title(id, title)
-               var list = new TplList.with_classes(["list-unstyled", "list-definition"])
-               for mentity in mentities do
-                       list.elts.add mentity.tpl_list_item
+redef class HomeArticle
+       redef fun init_html_render(v, doc, page) do
+               if v.ctx.opt_custom_title.value != null then
+                       self.html_title = v.ctx.opt_custom_title.value.to_s
+                       self.toc_title = v.ctx.opt_custom_title.value.to_s
                end
-               article.content = list
-               parent.add_child article
+               self.content = v.ctx.opt_custom_intro.value
+               super
        end
 end
 
 redef class GraphArticle
-       redef fun render(v, doc, page, parent) do
+       redef fun init_html_render(v, doc, page) do
                var output_dir = v.ctx.output_dir
                var path = output_dir / id
                var path_sh = path.escape_to_sh
@@ -823,22 +593,7 @@ redef class GraphArticle
                file.close
                sys.system("\{ test -f {path_sh}.png && test -f {path_sh}.s.dot && diff -- {path_sh}.dot {path_sh}.s.dot >/dev/null 2>&1 ; \} || \{ cp -- {path_sh}.dot {path_sh}.s.dot && dot -Tpng -o{path_sh}.png -Tcmapx -o{path_sh}.map {path_sh}.s.dot ; \}")
                var fmap = new FileReader.open("{path}.map")
-               var map = fmap.read_all
+               self.map = fmap.read_all
                fmap.close
-
-               var article = new TplArticle("graph")
-               var alt = ""
-               # FIXME diff hack
-               # if title != null then
-                       # article.title = title
-                       # alt = "alt='{title.html_escape}'"
-               # end
-               article.css_classes.add "text-center"
-               var content = new Template
-               var name_html = id.html_escape
-               content.add "<img src='{name_html}.png' usemap='#{name_html}' style='margin:auto' {alt}/>"
-               content.add map
-               article.content = content
-               parent.add_child article
        end
 end
index 2f1151f..3e71df2 100644 (file)
@@ -43,7 +43,7 @@ class IndexingPhase
                                if not doc.mpropdefs.has(mpropdef) then continue
                                var full_name = mpropdef.mclassdef.mclass.full_name
                                var cls_url = mpropdef.mclassdef.mclass.nitdoc_url
-                               var def_url = "{cls_url}#{mpropdef.mproperty.nitdoc_id}"
+                               var def_url = "{cls_url}#article:{mpropdef.nitdoc_id}.definition"
                                add_result_for(mproperty.name, full_name, def_url)
                        end
                end
diff --git a/src/doc/doc_phases/doc_lin.nit b/src/doc/doc_phases/doc_lin.nit
new file mode 100644 (file)
index 0000000..eda76ba
--- /dev/null
@@ -0,0 +1,100 @@
+# 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.
+
+# Add linearization lists to DefinitionArticle found in MClass pages.
+module doc_lin
+
+import doc_structure
+
+# LinPhase populates the DocPage content with linearization data.
+class LinListPhase
+       super DocPhase
+
+       # Used to sort list by linearization order
+       private var lin_sorter = new MEntityNameSorter
+
+       redef fun apply do
+               for page in doc.pages do page.apply_linearization(self, doc)
+       end
+end
+
+redef class DocPage
+
+       # Populates `self` with linearization data.
+       #
+       # See `LinListPhase`.
+       fun apply_linearization(v: LinListPhase, doc: DocModel) do end
+end
+
+redef class MClassPage
+       redef fun apply_linearization(v, doc) do
+               root.apply_linearization(v, doc, self)
+       end
+end
+
+redef class DocComposite
+
+       # Populates `self` with linearization data.
+       #
+       # For now, it's only used for mpropdefs linearization in MClassPage.
+       #
+       # See `LinListPhase`.
+       private fun apply_linearization(v: LinListPhase, doc: DocModel, page: DocPage) do
+               for child in children do child.apply_linearization(v, doc, page)
+       end
+end
+
+redef class DefinitionArticle
+       redef fun apply_linearization(v, doc, page) do
+               var mentity = self.mentity
+               if not mentity isa MPropDef then return
+               # Add linearization
+               var all_defs = new HashSet[MPropDef]
+               for local_def in local_defs(page.as(MClassPage), mentity.mproperty) do
+                       all_defs.add local_def
+                       var smpropdef = local_def
+                       while not smpropdef.is_intro do
+                               smpropdef = smpropdef.lookup_next_definition(
+                                       doc.mainmodule, smpropdef.mclassdef.bound_mtype)
+                               all_defs.add smpropdef
+                       end
+               end
+               var lin = all_defs.to_a
+               doc.mainmodule.linearize_mpropdefs(lin)
+               if lin.length > 1 then
+                       add_child new DefinitionLinArticle(mentity, lin)
+               end
+       end
+
+       # Filter `page.mpropdefs` for this `mpropertie`.
+       #
+       # FIXME compatability with current templates.
+       private fun local_defs(page: MClassPage, mproperty: MProperty): HashSet[MPropDef] do
+               var mpropdefs = new HashSet[MPropDef]
+               for mpropdef in page.mpropdefs do
+                       if mpropdef.mproperty == mproperty then
+                               mpropdefs.add mpropdef
+                       end
+               end
+               return mpropdefs
+       end
+end
+
+# Display a linearized list of definitions.
+class DefinitionLinArticle
+       super MEntityArticle
+
+       # The linearized list to display.
+       var mentities: Array[MEntity]
+end
index 9c32c8c..fc2dc17 100644 (file)
@@ -32,15 +32,11 @@ class StructurePhase
 
        # Populates the given DocModel.
        redef fun apply do
-               for page in doc.pages do
-                       if page isa MEntityPage then page.apply_structure(self, doc)
-               end
+               for page in doc.pages do page.apply_structure(self, doc)
        end
-
-       # TODO index and search page should also be structured here
 end
 
-redef class MEntityPage
+redef class DocPage
 
        # Populates `self` with structure elements like DocComposite ones.
        #
@@ -48,6 +44,34 @@ redef class MEntityPage
        fun apply_structure(v: StructurePhase, doc: DocModel) do end
 end
 
+redef class OverviewPage
+       redef fun apply_structure(v, doc) do
+               var article = new HomeArticle
+               root.add_child article
+               # Projects list
+               var mprojects = doc.model.mprojects.to_a
+               var sorter = new MConcernRankSorter
+               sorter.sort mprojects
+               var section = new ProjectsSection
+               for mproject in mprojects do
+                       section.add_child new DefinitionArticle(mproject)
+               end
+               article.add_child section
+       end
+end
+
+redef class SearchPage
+       redef fun apply_structure(v, doc) do
+               var mmodules = doc.mmodules.to_a
+               v.name_sorter.sort(mmodules)
+               var mclasses = doc.mclasses.to_a
+               v.name_sorter.sort(mclasses)
+               var mprops = doc.mproperties.to_a
+               v.name_sorter.sort(mprops)
+               root.add_child new IndexArticle(mmodules, mclasses, mprops)
+       end
+end
+
 redef class MGroupPage
        redef fun apply_structure(v, doc) do
                var section = new MEntitySection(mentity)
@@ -67,11 +91,11 @@ redef class MGroupPage
                mentity.booster_rank = 0
                section.add_child new ConcernsArticle(mentity, concerns)
                for mentity in concerns do
+                       var ssection = new ConcernSection(mentity)
                        if mentity isa MModule then
-                               section.add_child new DefinitionArticle(mentity)
-                       else
-                               section.add_child new ConcernSection(mentity)
+                               ssection.add_child new DefinitionArticle(mentity)
                        end
+                       section.add_child ssection
                end
        end
 end
@@ -99,7 +123,7 @@ redef class MModulePage
                                var mclasses = mclasses_for_mmodule(mentity).to_a
                                v.name_sorter.sort(mclasses)
                                for mclass in mclasses do
-                                       var article = new DefinitionArticle(mclass)
+                                       var article = new DefinitionListArticle(mclass)
                                        var mclassdefs = mclassdefs_for(mclass).to_a
                                        if not mclassdefs.has(mclass.intro) then
                                                article.add_child(new DefinitionArticle(mclass.intro))
@@ -290,7 +314,36 @@ class ConcernsArticle
        var concerns: ConcernsTree
 end
 
+# An article that displaus a list of definition belonging to a MEntity.
+class DefinitionListArticle
+       super MEntityArticle
+end
+
 # An article that display the definition text of a MEntity.
 class DefinitionArticle
        super MEntityArticle
 end
+
+# The main project article.
+class HomeArticle
+       super DocArticle
+end
+
+# The project list.
+class ProjectsSection
+       super DocArticle
+end
+
+# An article that display an index of mmodules, mclasses and mproperties.
+class IndexArticle
+       super DocArticle
+
+       # List of mmodules to display.
+       var mmodules: Array[MModule]
+
+       # List of mclasses to display.
+       var mclasses: Array[MClass]
+
+       # List of mproperties to display.
+       var mprops: Array[MProperty]
+end
index e65059b..221162b 100644 (file)
 module html_components
 
 import doc_base
-import template
+import html::bootstrap
 import json::static
 
-#########################
-# general layout elements
-#########################
+# A label with a text content.
+class DocHTMLLabel
+       super BSLabel
 
-# A sidebar template
-class TplSidebar
-       super Template
-
-       # Sidebar contains sidebar element templates called boxes
-       var boxes = new Array[TplSidebarElt]
-
-       # Sort boxes by order priority
-       private fun order_boxes do
-               var sorter = new OrderComparator
-               sorter.sort(boxes)
-       end
-
-       redef fun rendering do
-               if boxes.is_empty then return
-               order_boxes
-               addn "<div id='sidebar'>"
-               for box in boxes do add box
-               addn "</div>"
-       end
-end
-
-# Comparator used to sort boxes by order
-private class OrderComparator
-       super Comparator
-
-       redef type COMPARED: TplSidebarElt
-
-       redef fun compare(a, b) do
-               if a.order < b.order then return -1
-               if a.order > b.order then return 1
-               return 0
-       end
-end
-
-# Something that can be put in the sidebar
-class TplSidebarElt
-       super Template
-
-       # Order of the box in the sidebar
-       var order: Int = 1
-
-       init with_order(order: Int) do self.order = order
-end
-
-# Agenericbox that can be added to sidebar
-class TplSideBox
-       super TplSidebarElt
-
-       # Title of the box to display
-       # Title is also a placeholder for the collapse link
-       var title: String
-
-       # Box HTML id
-       # equals to `title.to_cmangle` by default
-       # Used for collapsing
-       var id: String is noinit
-
-       # Content to display in the box
-       # box will not be rendered if the content is null
-       var content: nullable Writable = null is writable
-
-       # Is the box opened by default
-       # otherwise, the user will have to clic on the title to display the content
-       var is_open = false is writable
-
-       init do
-               self.id = title.to_cmangle
-       end
-
-       init with_content(title: String, content: Writable) do
-               init(title)
-               self.content = content
-       end
-
-       redef fun rendering do
-               if content == null then return
-               var open = ""
-               if is_open then open = "in"
-               addn "<div class='panel'>"
-               addn " <div class='panel-heading'>"
-               add "  <a data-toggle='collapse' data-parent='#sidebar' data-target='#box_{id}' href='#'>"
-               add title
-               addn "  </a>"
-               addn " </div>"
-               addn " <div id='box_{id}' class='panel-body collapse {open}'>"
-               add content.as(not null)
-               addn " </div>"
-               addn "</div>"
-       end
-end
-
-# Something that can go on a summary template
-class TplSummaryElt
-       super Template
-
-       # Add an element to the summary
-       fun add_child(child: TplSummaryElt) is abstract
-end
-
-# A summary that can go on the sidebar
-# If the page contains a sidebar, the summary is automatically placed
-# on top of the sidebarauto-generated
-# summary contains anchors to all sections displayed in the page
-class TplSummary
-       super TplSidebarElt
-       super TplSummaryElt
-
-       # Summary elements to display
-       var children = new Array[TplSummaryElt]
-
-       redef fun add_child(child) do children.add child
-
-       redef fun rendering do
-               if children.is_empty then return
-               addn "<div class='panel'>"
-               addn " <div class='panel-heading'>"
-               add "  <a data-toggle='collapse' data-parent='#sidebar' data-target='#box-sum' href='#'>"
-               add "Summary"
-               addn "  </a>"
-               addn " </div>"
-               addn " <div id='box-sum' class='summary collapse in'>"
-               addn " <ul class='nav'>"
-               for entry in children do add entry
-               addn " </ul>"
-               addn " </div>"
-               addn "</div>"
-       end
-end
-
-# A summary entry
-class TplSummaryEntry
-       super TplSummaryElt
-
-       # Text to display
-       var text: Writable
-
-       # Children of this entry
-       # Will be displayed as a tree
-       var children = new Array[TplSummaryElt]
-
-       redef fun add_child(child) do children.add child
-
-       redef fun rendering do
-               add "<li>"
-               add text
-               if not children.is_empty then
-                       addn "\n<ul class='nav'>"
-                       for entry in children do add entry
-                       addn "</ul>"
-               end
-               addn  "</li>"
-       end
-end
-
-# Something that can go in a section
-# Sections are automatically collected to populate the menu
-class TplSectionElt
-       super Template
-
-       # HTML anchor id
-       var id: String
-
-       # Title to display if any
-       # if both `title` and `summary_title` are null then
-       # the section will not appear in the summary
-       var title: nullable Writable = null is writable
-
-       # Subtitle to display if any
-       var subtitle: nullable Writable = null is writable
-
-       # Title that appear in the summary
-       # if null use `title` instead
-       var summary_title: nullable String = null is writable
-
-       # CSS classes to apply on the section element
-       var css_classes = new Array[String]
-
-       # CSS classes to apply on the title heading element
-       var title_classes = new Array[String]
-
-       # Parent article/section if any
-       var parent: nullable TplSectionElt = null
-
-       init with_title(id: String, title: Writable) do
-               init(id)
-               self.title = title
-       end
-
-       # Level <hX> for HTML heading
-       protected fun hlvl: Int do
-               if parent == null then return 1
-               return parent.hlvl + 1
-       end
-
-       # Elements contained by this section
-       var children = new Array[TplSectionElt]
-
-       # Add an element in this section
-       fun add_child(child: TplSectionElt) do
-               child.parent = self
-               children.add child
-       end
-
-       # Is the section empty (no content at all)
-       fun is_empty: Bool do return children.is_empty
-
-       # Render this section in the summary
-       fun render_summary(parent: TplSummaryElt) do
-               if is_empty then return
-               var title = summary_title
-               if title == null and self.title != null then title = self.title.write_to_string
-               if title == null then return
-               var lnk = new TplLink("#{id}", title)
-               var entry = new TplSummaryEntry(lnk)
-               for child in children do
-                       child.render_summary(entry)
-               end
-               parent.add_child entry
-       end
-end
-
-# A HTML <section> element
-class TplSection
-       super TplSectionElt
-
-       redef fun rendering do
-               addn "<section id='{id}' class='{css_classes.join(" ")}'>"
-               if title != null then
-                       var lvl = hlvl
-                       if lvl == 2 then title_classes.add "well well-sm"
-                       addn "<h{lvl} class='{title_classes.join(" ")}'>"
-                       addn title.as(not null)
-                       addn "</h{lvl}>"
-               end
-               if subtitle != null then
-                       addn "<div class='info subtitle'>"
-                       addn subtitle.as(not null)
-                       addn "</div>"
-               end
-               for child in children do
-                       add child
-               end
-               addn "</section>"
-       end
-end
-
-# A page article that can go in a section
-class TplArticle
-       super TplSectionElt
-
-       # Content for this article
-       var content: nullable Writable = null is writable
-       var source_link: nullable Writable = null is writable
-
-       init with_content(id: String, title: Writable, content: Writable) do
-               with_title(id, title)
-               self.content = content
-       end
-
-       redef fun render_summary(parent) do
-               if is_empty then return
-               var title = summary_title
-               if title == null and self.title != null then title = self.title.write_to_string
-               if title == null then return
-               var lnk = new TplLink("#{id}", title)
-               parent.add_child new TplSummaryEntry(lnk)
-       end
-
-       redef fun rendering do
-               if is_empty then return
-               addn "<article id='{id}' class='{css_classes.join(" ")}'>"
-               if source_link != null then
-                       add "<div class='source-link'>"
-                       add source_link.as(not null)
-                       addn "</div>"
-               end
-               if title != null then
-                       var lvl = hlvl
-                       if lvl == 2 then title_classes.add "well well-sm"
-                       add "<h{lvl} class='{title_classes.join(" ")}'>"
-                       add title.as(not null)
-                       addn "</h{lvl}>"
-               end
-               if subtitle != null then
-                       add "<div class='info subtitle'>"
-                       add subtitle.as(not null)
-                       addn "</div>"
-               end
-               if content != null then
-                       add content.as(not null)
-               end
-               for child in children do
-                       add child
-               end
-               addn """</article>"""
-       end
-
-       redef fun is_empty: Bool do
-               return title == null and subtitle == null and content == null and children.is_empty
-       end
-end
-
-# A module / class / prop definition
-class TplDefinition
-       super Template
-
-       # Comment to display
-       var comment: nullable Writable = null is writable
-
-       # Namespace for this definition
-       var namespace: nullable Writable = null is writable
-
-       # Location link to display
-       var location: nullable Writable = null is writable
-
-       private fun render_info do
-               addn "<div class='info text-right'>"
-               if namespace != null then
-                       if comment == null then
-                               add "<span class=\"noComment\">no comment for </span>"
-                       end
-                       add namespace.as(not null)
-               end
-               if location != null then
-                       add " "
-                       add location.as(not null)
-               end
-               addn "</div>"
-       end
-
-       private fun render_comment do
-               if comment != null then add comment.as(not null)
-       end
-
-       redef fun rendering do
-               addn "<div class='definition'>"
-               render_comment
-               render_info
-               addn "</div>"
-       end
-end
-
-# Class definition
-class TplClassDefinition
-       super TplDefinition
-
-       var intros = new Array[TplListElt]
-       var redefs = new Array[TplListElt]
-
-       redef fun rendering do
-               addn "<div class='definition'>"
-               render_comment
-               render_info
-               render_list("Introduces", intros)
-               render_list("Redefines", redefs)
-               addn "</div>"
+       redef init do
+               css_classes.clear
+               css_classes.add "label"
        end
 
-       private fun render_list(name: String, elts: Array[TplListElt]) do
-               if elts.is_empty then return
-               addn "<h5>{name.html_escape}</h5>"
-               addn "<ul class='list-unstyled list-definition'>"
-               for elt in elts do add elt
-               addn "</ul>"
-       end
-end
-
-# Layout for Search page
-class TplSearchPage
-       super TplSectionElt
-
-       var modules = new Array[Writable]
-       var classes = new Array[Writable]
-       var props = new Array[Writable]
-
-       redef fun rendering do
-               var title = self.title
-               if title != null then addn "<h1>{title.to_s.html_escape}</h1>"
-               addn "<div class='container-fluid'>"
-               addn " <div class='row'>"
-               if not modules.is_empty then
-                       addn "<div class='col-xs-4'>"
-                       addn "<h3>Modules</h3>"
-                       addn "<ul>"
-                       for m in modules do
-                               add "<li>"
-                               add m
-                               addn "</li>"
-                       end
-                       addn "</ul>"
-                       addn "</div>"
-               end
-               if not classes.is_empty then
-                       addn "<div class='col-xs-4'>"
-                       addn "<h3>Classes</h3>"
-                       addn "<ul>"
-                       for c in classes do
-                               add "<li>"
-                               add c
-                               addn "</li>"
-                       end
-                       addn "</ul>"
-                       addn "</div>"
-               end
-               if not props.is_empty then
-                       addn "<div class='col-xs-4'>"
-                       addn "<h3>Properties</h3>"
-                       addn "<ul>"
-                       for p in props do
-                               add "<li>"
-                               add p
-                               addn "</li>"
-                       end
-                       addn "</ul>"
-                       addn "</div>"
-               end
-               addn " </div>"
-               addn "</div>"
-       end
-end
-
-#####################
-# Basiv HTML elements
-#####################
-
-# A html link <a>
-class TplLink
-       super Template
-
-       # Link href
-       var href: String is writable
-
-       # The raw HTML content to display in the link
-       var text: Writable is writable
-
-       # The unescaped optional title.
-       var title: nullable String = null is writable
-
-       init with_title(href, text, title: String) do
-               init(href, text)
-               self.title = title
-       end
-
-       redef fun rendering do
-               add "<a href=\""
-               add href.html_escape
-               add "\""
-               if title != null then
-                       add " title=\""
-                       add title.as(not null).html_escape
-                       add "\""
-               end
-               add ">"
-               add text
-               add "</a>"
-       end
-end
-
-# A <ul> list
-class TplList
-       super TplListElt
-
-       # Elements contained in this list
-       # can be <li> or <ul> elements
-       var elts = new Array[TplListElt]
-
-       # CSS classes of the <ul> element
-       var css_classes = new Array[String]
-
-       # Add content wrapped in a <li> element
-       fun add_li(item: TplListItem) do elts.add item
-
-       init with_classes(classes: Array[String]) do self.css_classes = classes
-
-       fun is_empty: Bool do return elts.is_empty
-
-       redef fun rendering do
-               if elts.is_empty then return
-               addn "<ul class='{css_classes.join(" ")}'>"
-               for elt in elts do add elt
-               addn "</ul>"
-       end
-end
-
-# Something that can be added to a TplList
-class TplListElt
-       super Template
-end
-
-# A list item <li>
-class TplListItem
-       super TplListElt
-
-       # Content of the list item
-       var content = new Template
-
-       # CSS classes of the <li> element
-       var css_classes = new Array[String]
-
-       init with_content(content: Writable) do append(content)
-
-       init with_classes(content: Writable, classes: Array[String]) do
-               with_content(content)
-               css_classes = classes
-       end
-
-       # Append `content` to the item
-       # similar to `self.content.add`
-       fun append(content: Writable) do self.content.add content
-
-       redef fun rendering do
-               add "<li class='{css_classes.join(" ")}'>"
-               add content
-               addn "</li>"
-       end
-end
-
-# A Bootstrap tab component that contains `TplTabPanel`.
-class TplTab
-       super Template
-
-       # Panels contained in the tab.
-       var panels = new Array[TplTabPanel]
-
-       # Add a new panel.
-       fun add_panel(panel: TplTabPanel) do panels.add panel
-
-       # CSS classes of the tab component.
-       var css_classes = new Array[String]
-
-       redef fun rendering do
-               addn "<div class='tab-content'>"
-               for panel in panels do add panel
-               addn "</div>"
-       end
-end
-
-# A panel that goes in a `TplTab`.
-class TplTabPanel
-       super Template
-
-       # CSS classes of the pane element.
-       var css_classes = new Array[String]
-
-       # The panel id.
-       #
-       # Used to show/hide panel.
-       var id: String is noinit
-
-       # The panel name.
-       #
-       # Displayed in the tab header or in the pointing link.
-       var name: Writable
-
-       # Is the panel visible by default?
-       var is_active = false is writable
-
-       # Body of the panel
-       var content: nullable Writable = null is writable
-
-       # Get a link pointing to this panel.
-       fun tpl_link_to: Writable do
-               var lnk = new Template
-               lnk.add "<a data-target='#{id}' data-toggle='pill'>"
-               lnk.add name
-               lnk.add "</a>"
-               return lnk
-       end
-
-       redef fun rendering do
-               add "<div class='tab-pane {css_classes.join(" ")}"
-               if is_active then add "active"
-               addn "' id='{id}'>"
-               if content != null then add content.as(not null)
-               addn "</div>"
-       end
-end
-
-# A label with a text content
-class TplLabel
-       super Template
-
-       # Content of the label if any
-       var content: nullable Writable = null is writable
-
-       # CSS classes of the <span> element
-       var css_classes = new Array[String]
-
-       init with_content(content: Writable) do self.content = content
-       init with_classes(classes: Array[String]) do self.css_classes = classes
-
-       redef fun rendering do
-               add "<span class='label {css_classes.join(" ")}'>"
-               if content != null then add content.as(not null)
-               add "</span>"
-       end
-end
-
-# A label with an icon
-class TplIcon
-       super TplLabel
-
-       # Bootsrap icon name
-       # see: http://getbootstrap.com/components/#glyphicons
-       var icon: String
-
-       init with_icon(icon: String) do self.icon = icon
-
-       redef fun rendering do
-               add "<span class='glyphicon glyphicon-{icon} {css_classes.join(" ")}'>"
-               if content != null then add content.as(not null)
-               add "</span>"
+       # Init this label from css classes.
+       init with_classes(classes: Array[String]) do
+               init("label", "")
+               css_classes.add_all classes
        end
 end
 
@@ -669,17 +65,21 @@ class TagAttribute
        end
 end
 
-# Javacript template
+# Javacript template that can be added into a DocPage.
 class TplScript
        super Template
 
+       # HTML attributes to add in this tag.
        var attrs = new Array[TagAttribute]
+
+       # Text content of this script tag.
        var content: nullable Writable = null is writable
 
        init do
                attrs.add(new TagAttribute("type", "text/javascript"))
        end
 
+       # Render the content of this script.
        protected fun render_content do
                if content != null then add content.as(not null)
        end
@@ -697,7 +97,10 @@ end
 class TplPiwikScript
        super TplScript
 
+       # Piwik URL to use for this tracker.
        var tracker_url: String
+
+       # Site ID used on Piwik system.
        var site_id: String
 
        redef fun render_content do
index 2908fad..c112e25 100644 (file)
@@ -18,18 +18,9 @@ module html_model
 import doc_base
 import doc_down
 import html_components
+import html::bootstrap
 import ordered_tree
 
-redef class Location
-       # Github url based on this location
-       fun github(gitdir: String): String do
-               var base_dir = getcwd.join_path(gitdir).simplify_path
-               var file_loc = getcwd.join_path(file.filename).simplify_path
-               var gith_loc = file_loc.substring(base_dir.length + 1, file_loc.length)
-               return "{gith_loc}:{line_start},{column_start}--{line_end},{column_end}"
-       end
-end
-
 redef class MEntity
        # ID used as a HTML unique ID and in file names.
        #
@@ -56,9 +47,11 @@ redef class MEntity
        # * MPropdef: `foo(e)`
        var html_name: String is lazy do return name.html_escape
 
-       # A template link to the mentity `nitdoc_id`
-       fun tpl_anchor: TplLink do
-               var tpl = new TplLink("#{nitdoc_id}", html_name)
+       # Returns a Link to the mentity `html_url`.
+       #
+       # Example: `<a href="html_url" title="mdoc.short_comment">html_short_name</a>
+       var html_link: Link is lazy do
+               var tpl = new Link(nitdoc_url, html_name)
                var mdoc = mdoc_or_fallback
                if mdoc != null then
                        tpl.title = mdoc.short_comment
@@ -66,9 +59,11 @@ redef class MEntity
                return tpl
        end
 
-       # A template link to the mentity `nitdoc_url`
-       fun tpl_link: TplLink do
-               var tpl = new TplLink(nitdoc_url, html_name)
+       # Returns a Link to the mentity `nitdoc_id`.
+       #
+       # Example: `<a href="#nitdoc_id" title="mdoc.short_comment">html_short_name</a>
+       fun html_link_to_anchor: Link do
+               var tpl = new Link("#{nitdoc_id}", html_name)
                var mdoc = mdoc_or_fallback
                if mdoc != null then
                        tpl.title = mdoc.short_comment
@@ -76,104 +71,85 @@ redef class MEntity
                return tpl
        end
 
-       # A template article that briefly describe the entity
-       fun tpl_short_article: TplArticle do
-               var tpl = tpl_article
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.content = mdoc.tpl_short_comment
-               end
-               return tpl
-       end
+       # Returns the list of keyword used in `self` declaration.
+       fun html_modifiers: Array[String] is abstract
 
-       # A template article that describe the entity
-       fun tpl_article: TplArticle do
-               var tpl = new TplArticle.with_title(nitdoc_id, tpl_title)
-               tpl.title_classes.add "signature"
-               tpl.subtitle = tpl_namespace
-               tpl.summary_title = html_name
+       # Returns the complete MEntity declaration decorated with HTML.
+       #
+       # * MProject: `project foo`
+       # * MGroup: `group foo`
+       # * MModule: `module foo`
+       # * MClass: `private abstract class Foo[E: Object]`
+       # * MClassDef: `redef class Foo[E]`
+       # * MProperty: `private fun foo(e: Object): Int`
+       # * MPropdef: `redef fun foo(e)`
+       fun html_declaration: Template do
+               var tpl = new Template
+               tpl.add "<span>"
+               tpl.add html_modifiers.join(" ")
+               tpl.add " "
+               tpl.add html_link
+               tpl.add "</span>"
                return tpl
        end
 
-       # A template signature that contains modifiers and parameters
-       fun tpl_declaration: Template is abstract
-
-       # A template namespace
-       fun tpl_namespace: Template is abstract
-
-       # A template definition of the mentity
-       # include name, sysnopsys, comment and namespace
-       fun tpl_definition: TplDefinition is abstract
-
-       # A li element that can go in a list
-       fun tpl_list_item: TplListItem do
-               var lnk = new Template
-               lnk.add new TplLabel.with_classes(tpl_css_classes)
-               lnk.add tpl_link
+       # Returns `self` namespace decorated with HTML links.
+       #
+       # * MProject: `mproject`
+       # * MGroup: `mproject(::group)`
+       # * MModule: `mgroup::mmodule`
+       # * MClass: `mproject::mclass`
+       # * MClassDef: `mmodule::mclassdef`
+       # * MProperty: `mclass::mprop`
+       # * MPropdef: `mclassdef:mpropdef`
+       fun html_namespace: Template is abstract
+
+       # Returns the comment of this MEntity formatted as HTML.
+       var html_comment: nullable Writable is lazy do
                var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       lnk.add ": "
-                       lnk.add mdoc.tpl_short_comment
-               end
-               return new TplListItem.with_content(lnk)
+               if mdoc == null then return null
+               return mdoc.tpl_comment
        end
 
-       var tpl_css_classes = new Array[String]
-
-       # Box title for this mentity
-       fun tpl_title: Template do
-               var title = new Template
-               title.add tpl_icon
-               title.add tpl_namespace
-               return title
+       # Returns the comment of this MEntity formatted as HTML.
+       var html_short_comment: nullable Writable is lazy do
+               var mdoc = mdoc_or_fallback
+               if mdoc == null then return null
+               return mdoc.tpl_short_comment
        end
 
        # Icon that will be displayed before the title
-       fun tpl_icon: TplIcon do
-               var icon = new TplIcon.with_icon("tag")
-               icon.css_classes.add_all(tpl_css_classes)
+       fun html_icon: BSIcon do
+               var icon = new BSIcon("tag")
+               icon.css_classes.add_all(css_classes)
                return icon
        end
-end
 
-redef class MConcern
-       # Return a li element for `self` that can be displayed in a concern list
-       private fun tpl_concern_item: TplListItem do
-               var lnk = new Template
-               lnk.add tpl_anchor
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       lnk.add ": "
-                       lnk.add mdoc.tpl_short_comment
+       # CSS classes used to decorate `self`.
+       #
+       # Mainly used for icons.
+       var css_classes = new Array[String]
+
+       # A li element that can go in a `HTMLList`.
+       fun html_list_item: ListItem do
+               var tpl = new Template
+               tpl.add new DocHTMLLabel.with_classes(css_classes)
+               tpl.add html_link
+               var comment = html_short_comment
+               if comment != null then
+                       tpl.add ": "
+                       tpl.add comment
                end
-               return new TplListItem.with_content(lnk)
+               return new ListItem(tpl)
        end
 end
 
 redef class MProject
        redef var nitdoc_id = name.to_cmangle is lazy
        redef fun nitdoc_url do return root.nitdoc_url
-
-       redef fun tpl_declaration do
-               var tpl = new Template
-               tpl.add "<span>project "
-               tpl.add tpl_link
-               tpl.add "</span>"
-               return tpl
-       end
-
-       redef fun tpl_namespace do return tpl_link
-
-       redef fun tpl_definition do
-               var tpl = new TplDefinition
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.comment = mdoc.tpl_comment
-               end
-               return tpl
-       end
-
-       redef fun tpl_css_classes do return ["public"]
+       redef var html_modifiers = ["project"]
+       redef fun html_namespace do return html_link
+       redef var css_classes = ["public"]
 end
 
 redef class MGroup
@@ -185,33 +161,23 @@ redef class MGroup
        end
 
        redef fun nitdoc_url do return "group_{nitdoc_id}.html"
+       redef var html_modifiers = ["group"]
 
-       redef fun tpl_namespace do
+       # Depends if `self` is root or not.
+       #
+       # * If root `mproject`.
+       # * Else `mproject::self`.
+       redef fun html_namespace do
                var tpl = new Template
-               tpl.add mproject.tpl_namespace
+               tpl.add mproject.html_namespace
                if mproject.root != self then
                        tpl.add "::"
-                       tpl.add tpl_link
+                       tpl.add html_link
                end
                return tpl
        end
 
-       redef fun tpl_declaration do
-               var tpl = new Template
-               tpl.add "<span>group "
-               tpl.add tpl_link
-               tpl.add "</span>"
-               return tpl
-       end
-
-       redef fun tpl_definition do
-               var tpl = new TplDefinition
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.comment = mdoc.tpl_comment
-               end
-               return tpl
-       end
+       redef var css_classes = ["public"]
 end
 
 redef class MModule
@@ -227,35 +193,23 @@ redef class MModule
        end
 
        redef fun nitdoc_url do return "module_{nitdoc_id}.html"
+       redef var html_modifiers = ["module"]
 
-       redef fun tpl_declaration do
-               var tpl = new Template
-               tpl.add "<span>module "
-               tpl.add tpl_namespace
-               tpl.add "</span>"
-               return tpl
-       end
-
-       redef fun tpl_namespace do
+       # Depends if `self` belongs to a MGroup.
+       #
+       # * If mgroup `mgroup::self`.
+       # * Else `self`.
+       redef fun html_namespace do
                var tpl = new Template
                if mgroup != null then
-                       tpl.add mgroup.tpl_namespace
+                       tpl.add mgroup.html_namespace
                        tpl.add "::"
                end
-               tpl.add tpl_link
-               return tpl
-       end
-
-       redef fun tpl_definition do
-               var tpl = new TplClassDefinition
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.comment = mdoc.tpl_comment
-               end
+               tpl.add html_link
                return tpl
        end
 
-       redef fun tpl_css_classes do return ["public"]
+       redef var css_classes = ["public"]
 end
 
 redef class MClass
@@ -279,98 +233,88 @@ redef class MClass
                return tpl.write_to_string
        end
 
-       redef fun tpl_declaration do return intro.tpl_declaration
-       redef fun tpl_definition do return intro.tpl_definition
+       redef fun html_modifiers do return intro.html_modifiers
+       redef fun html_declaration do return intro.html_declaration
 
-       redef fun tpl_namespace do
+       # Returns `mproject::self`.
+       redef fun html_namespace do
                var tpl = new Template
-               tpl.add intro_mmodule.mgroup.mproject.tpl_namespace
+               tpl.add intro_mmodule.mgroup.mproject.html_namespace
                tpl.add "::<span>"
-               tpl.add tpl_link
+               tpl.add html_link
                tpl.add "</span>"
                return tpl
        end
 
-       redef fun tpl_title do
-               var title = new Template
-               title.add tpl_icon
-               title.add tpl_link
-               return title
-       end
+       # Returns `intro.html_short_signature`.
+       fun html_short_signature: Template do return intro.html_short_signature
 
-       redef fun tpl_icon do return intro.tpl_icon
+       # Returns `intro.html_signature`.
+       fun html_signature: Template do return intro.html_signature
 
-       fun tpl_signature: Template do
-               var tpl = new Template
-               if arity > 0 then
-                       tpl.add "["
-                       var parameter_names = new Array[String]
-                       for p in mparameters do
-                               parameter_names.add(p.html_name)
-                       end
-                       tpl.add parameter_names.join(", ")
-                       tpl.add "]"
-               end
-               return tpl
-       end
-
-       redef fun tpl_css_classes do return intro.tpl_css_classes
+       redef fun html_icon do return intro.html_icon
+       redef fun css_classes do return intro.css_classes
 end
 
 redef class MClassDef
        redef var nitdoc_id = "{mmodule.nitdoc_id}__{name.to_cmangle}" is lazy
        redef fun nitdoc_url do return "{mclass.nitdoc_url}#{nitdoc_id}"
-
        redef fun mdoc_or_fallback do return mdoc or else mclass.mdoc_or_fallback
 
-       redef fun tpl_namespace do
-               var tpl = new Template
-               tpl.add mmodule.tpl_namespace
-               tpl.add "::<span>"
-               tpl.add mclass.tpl_link
-               tpl.add "</span>"
-               return tpl
+       # Depends if `self` is an intro or not.
+       #
+       # * If intro contains the visibility and kind.
+       # * If redef contains the `redef` keyword and kind.
+       redef fun html_modifiers do
+               var res = new Array[String]
+               if not is_intro then
+                       res.add "redef"
+               else
+                       if mclass.visibility != public_visibility then
+                               res.add mclass.visibility.to_s
+                       end
+               end
+               res.add mclass.kind.to_s
+               return res
        end
 
-       redef fun tpl_article do
-               var tpl = new TplArticle(nitdoc_id)
-               tpl.summary_title = "in {mmodule.html_name}"
-               tpl.title = tpl_declaration
-               tpl.title_classes.add "signature"
-               var title = new Template
-               title.add "in "
-               title.add mmodule.tpl_namespace
-               tpl.subtitle = title
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.content = mdoc.tpl_comment
+       # Depends if `self` is an intro or not.
+       #
+       # For intro: `private abstract class Foo[E: Object]`
+       # For redef: `redef class Foo[E]`
+       redef fun html_declaration do
+               var tpl = new Template
+               tpl.add "<span>"
+               tpl.add html_modifiers.join(" ")
+               tpl.add " "
+               tpl.add html_link
+               if is_intro then
+                       tpl.add html_signature
+               else
+                       tpl.add html_short_signature
                end
+               tpl.add "</span>"
                return tpl
        end
 
-       redef fun tpl_title do
-               var title = new Template
-               title.add tpl_icon
-               title.add tpl_link
-               return title
-       end
-
-       redef fun tpl_declaration do
+       # Returns `mmodule::self`
+       redef fun html_namespace do
                var tpl = new Template
-               tpl.add tpl_modifiers
-               tpl.add tpl_link
-               tpl.add tpl_signature
+               tpl.add mmodule.html_namespace
+               tpl.add "::<span>"
+               tpl.add mclass.html_link
+               tpl.add "</span>"
                return tpl
        end
 
-       fun tpl_signature: Template do
+       # Returns the MClassDef generic signature without static bounds.
+       fun html_short_signature: Template do
                var tpl = new Template
                var mparameters = mclass.mparameters
                if not mparameters.is_empty then
                        tpl.add "["
                        for i in [0..mparameters.length[ do
-                               tpl.add "{mparameters[i].html_name}: "
-                               tpl.add bound_mtype.arguments[i].tpl_signature
+                               tpl.add mparameters[i].html_name
                                if i < mparameters.length - 1 then tpl.add ", "
                        end
                        tpl.add "]"
@@ -378,230 +322,239 @@ redef class MClassDef
                return tpl
        end
 
-       redef fun tpl_definition do
-               var tpl = new TplClassDefinition
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.comment = mdoc.tpl_comment
+       # Returns the MClassDef generic signature with static bounds.
+       fun html_signature: Template do
+               var tpl = new Template
+               var mparameters = mclass.mparameters
+               if not mparameters.is_empty then
+                       tpl.add "["
+                       for i in [0..mparameters.length[ do
+                               tpl.add "{mparameters[i].html_name}: "
+                               tpl.add bound_mtype.arguments[i].html_signature
+                               if i < mparameters.length - 1 then tpl.add ", "
+                       end
+                       tpl.add "]"
                end
                return tpl
        end
 
-       redef fun tpl_css_classes do
+       redef fun css_classes do
                var set = new HashSet[String]
                if is_intro then set.add "intro"
                for m in mclass.intro.modifiers do set.add m.to_cmangle
                for m in modifiers do set.add m.to_cmangle
                return set.to_a
        end
-
-       fun tpl_modifiers: Template do
-               var tpl = new Template
-               for modifier in modifiers do
-                       if modifier == "public" then continue
-                       tpl.add "{modifier.html_escape} "
-               end
-               return tpl
-       end
 end
 
 redef class MProperty
        redef var nitdoc_id = "{intro_mclassdef.mclass.nitdoc_id}__{name.to_cmangle}" is lazy
        redef fun nitdoc_url do return "property_{nitdoc_id}.html"
-
        redef fun mdoc_or_fallback do return intro.mdoc
+       redef fun html_modifiers do return intro.html_modifiers
+       redef fun html_declaration do return intro.html_declaration
 
-       redef fun tpl_namespace do
+       # Returns `mclass::self`.
+       redef fun html_namespace do
                var tpl = new Template
-               tpl.add intro_mclassdef.mclass.tpl_namespace
+               tpl.add intro_mclassdef.mclass.html_namespace
                tpl.add "::<span>"
-               tpl.add intro.tpl_link
+               tpl.add intro.html_link
                tpl.add "</span>"
                return tpl
        end
 
-       redef fun tpl_declaration do return intro.tpl_declaration
+       # Returns `intro.html_short_signature`.
+       fun html_short_signature: Template do return intro.html_short_signature
 
-       fun tpl_signature: Template do return new Template
+       # Returns `intro.html_signature`.
+       fun html_signature: Template do return intro.html_signature
 
-       redef fun tpl_title do return intro.tpl_title
-
-       redef fun tpl_icon do return intro.tpl_icon
-
-       redef fun tpl_css_classes do return intro.tpl_css_classes
+       redef fun css_classes do return intro.css_classes
 end
 
 redef class MPropDef
        redef var nitdoc_id = "{mclassdef.nitdoc_id}__{name.to_cmangle}" is lazy
        redef fun nitdoc_url do return "{mproperty.nitdoc_url}#{nitdoc_id}"
-
        redef fun mdoc_or_fallback do return mdoc or else mproperty.mdoc_or_fallback
 
-       redef fun tpl_namespace do
-               var tpl = new Template
-               tpl.add mclassdef.tpl_namespace
-               tpl.add "::"
-               tpl.add tpl_link
-               return tpl
-       end
-
-       redef fun tpl_article do
-               var tpl = new TplArticle(nitdoc_id)
-               tpl.summary_title = "in {mclassdef.html_name}"
-               var title = new Template
-               title.add "in "
-               title.add mclassdef.tpl_link
-               tpl.title = title
-               tpl.subtitle = tpl_declaration
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.content = mdoc.tpl_comment
+       # Depends if `self` is an intro or not.
+       #
+       # * If intro contains the visibility and kind.
+       # * If redef contains the `redef` keyword and kind.
+       redef fun html_modifiers do
+               var res = new Array[String]
+               if not is_intro then
+                       res.add "redef"
+               else
+                       if mproperty.visibility != public_visibility then
+                               res.add mproperty.visibility.to_s
+                       end
                end
-               return tpl
+               return res
        end
 
-       redef fun tpl_definition do
-               var tpl = new TplDefinition
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.comment = mdoc.tpl_comment
+       # Depends if `self` is an intro or not.
+       #
+       # For intro: `private fun foo(e: Object): Bar is abstract`
+       # For redef: `redef fun foo(e) is cached`
+       redef fun html_declaration do
+               var tpl = new Template
+               tpl.add "<span>"
+               tpl.add html_modifiers.join(" ")
+               tpl.add " "
+               if is_intro then
+                       tpl.add html_link
+                       tpl.add html_signature
+               else
+                       tpl.add mproperty.intro.html_link
+                       tpl.add html_short_signature
                end
+               tpl.add "</span>"
                return tpl
        end
 
-       redef fun tpl_declaration do
+       # Returns `mclassdef::self`
+       redef fun html_namespace do
                var tpl = new Template
-               tpl.add tpl_modifiers
-               tpl.add tpl_link
-               tpl.add tpl_signature
+               tpl.add mclassdef.html_namespace
+               tpl.add "::"
+               tpl.add html_link
                return tpl
        end
 
-       redef fun tpl_css_classes do
+       # Returns the MPropdDef signature without static types.
+       fun html_short_signature: Template is abstract
+
+       # Returns the MPropDef signature with static types.
+       fun html_signature: Template is abstract
+
+       redef fun css_classes do
                var set = new HashSet[String]
                if is_intro then set.add "intro"
                for m in mproperty.intro.modifiers do set.add m.to_cmangle
                for m in modifiers do set.add m.to_cmangle
                return set.to_a
        end
+end
 
-       fun tpl_modifiers: Template do
-               var tpl = new Template
-               for modifier in modifiers do
-                       if modifier == "public" then continue
-                       tpl.add "{modifier.html_escape} "
-               end
-               return tpl
-       end
-
-       fun tpl_signature: Template do return new Template
+redef class MAttributeDef
 
-       redef fun tpl_list_item do
-               var lnk = new Template
-               lnk.add new TplLabel.with_classes(tpl_css_classes.to_a)
-               var anchor = tpl_link
-               anchor.href = "{mclassdef.mclass.nitdoc_url}#{mproperty.nitdoc_id}"
-               lnk.add anchor
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       lnk.add ": "
-                       lnk.add mdoc.tpl_short_comment
-               end
-               return new TplListItem.with_content(lnk)
+       redef fun html_modifiers do
+               var res = super
+               res.add "var"
+               return res
        end
 
-       fun tpl_inheritance_item: TplListItem do
-               var lnk = new Template
-               lnk.add new TplLabel.with_classes(tpl_css_classes.to_a)
-               lnk.add mclassdef.mmodule.tpl_namespace
-               lnk.add "::"
-               var anchor = mclassdef.tpl_link
-               anchor.href = "{mclassdef.mclass.nitdoc_url}#{mproperty.nitdoc_id}"
-               lnk.add anchor
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       lnk.add ": "
-                       lnk.add mdoc.tpl_short_comment
-               end
-               var li = new TplListItem.with_content(lnk)
-               li.css_classes.add "signature"
-               return li
-       end
-end
+       redef fun html_short_signature do return new Template
 
-redef class MAttributeDef
-       redef fun tpl_signature do
+       redef fun html_signature do
                var tpl = new Template
                if static_mtype != null then
                        tpl.add ": "
-                       tpl.add static_mtype.tpl_signature
+                       tpl.add static_mtype.html_signature
                end
                return tpl
        end
 end
 
-redef class MMethod
-       redef fun tpl_signature do
-               var tpl = new Template
-               var params = new Array[String]
-               for param in intro.msignature.mparameters do
-                       params.add param.name.html_escape
+redef class MMethodDef
+
+       # FIXME annotation should be handled in their own way
+       redef fun html_modifiers do
+               var res = super
+               if is_abstract then
+                       res.add "abstract"
+               else if is_intern then
+                       res.add "intern"
                end
-               if not params.is_empty then
-                       tpl.add "("
-                       tpl.add params.join(", ")
-                       tpl.add ")"
+               if mproperty.is_init then
+                       res.add "init"
+               else
+                       res.add "fun"
                end
-               return tpl
+               return res
        end
-end
 
-redef class MMethodDef
-       redef fun tpl_signature do return msignature.tpl_signature
+       redef fun html_short_signature do return msignature.html_short_signature
+       redef fun html_signature do return msignature.html_signature
 end
 
 redef class MVirtualTypeProp
-       redef fun tpl_link do return mvirtualtype.tpl_link
-       redef fun tpl_signature do return tpl_link
+       redef fun html_link do return mvirtualtype.html_link
 end
 
 redef class MVirtualTypeDef
-       redef fun tpl_signature do
+
+       redef fun html_modifiers do
+               var res = super
+               res.add "type"
+               return res
+       end
+
+       redef fun html_short_signature do return new Template
+
+       redef fun html_signature do
                var tpl = new Template
                if bound == null then return tpl
                tpl.add ": "
-               tpl.add bound.tpl_signature
+               tpl.add bound.html_signature
                return tpl
        end
 end
 
 redef class MType
-       fun tpl_signature: Template is abstract
+       # Returns the signature of this type whithout bounds.
+       fun html_short_signature: Template is abstract
+
+       # Returns the signature of this type.
+       fun html_signature: Template is abstract
 end
 
 redef class MClassType
-       redef fun tpl_link do return mclass.tpl_link
-       redef fun tpl_signature do return tpl_link
+       redef fun html_link do return mclass.html_link
+       redef fun html_short_signature do return html_link
+       redef fun html_signature do return html_link
 end
 
 redef class MNullableType
-       redef fun tpl_signature do
+
+       redef fun html_short_signature do
+               var tpl = new Template
+               tpl.add "nullable "
+               tpl.add mtype.html_short_signature
+               return tpl
+       end
+
+       redef fun html_signature do
                var tpl = new Template
                tpl.add "nullable "
-               tpl.add mtype.tpl_signature
+               tpl.add mtype.html_signature
                return tpl
        end
 end
 
 redef class MGenericType
-       redef fun tpl_signature do
+       redef fun html_short_signature do
+               var lnk = html_link
                var tpl = new Template
-               var lnk = tpl_link
-               lnk.text = mclass.name.html_escape
-               tpl.add lnk
+               tpl.add new Link.with_title(lnk.href, mclass.name.html_escape, lnk.title)
                tpl.add "["
                for i in [0..arguments.length[ do
-                       tpl.add arguments[i].tpl_signature
+                       tpl.add arguments[i].html_short_signature
+                       if i < arguments.length - 1 then tpl.add ", "
+               end
+               tpl.add "]"
+               return tpl
+       end
+
+       redef fun html_signature do
+               var lnk = html_link
+               var tpl = new Template
+               tpl.add new Link.with_title(lnk.href, mclass.name.html_escape, lnk.title)
+               tpl.add "["
+               for i in [0..arguments.length[ do
+                       tpl.add arguments[i].html_signature
                        if i < arguments.length - 1 then tpl.add ", "
                end
                tpl.add "]"
@@ -610,94 +563,132 @@ redef class MGenericType
 end
 
 redef class MParameterType
-       redef fun tpl_link do
-               return new TplLink.with_title("{mclass.nitdoc_url}#FT_{name.to_cmangle}", name, "formal type")
+       redef fun html_link do
+               return new Link.with_title("{mclass.nitdoc_url}#FT_{name.to_cmangle}", name, "formal type")
        end
-       redef fun tpl_signature do return tpl_link
+
+       redef fun html_short_signature do return html_link
+       redef fun html_signature do return html_link
 end
 
 redef class MVirtualType
-       redef fun tpl_link do return mproperty.intro.tpl_link
-       redef fun tpl_signature do return tpl_link
+       redef fun html_link do return mproperty.intro.html_link
+       redef fun html_signature do return html_link
 end
 
 redef class MSignature
-       redef fun tpl_signature do
+
+       redef fun html_short_signature do
+               var tpl = new Template
+               if not mparameters.is_empty then
+                       tpl.add "("
+                       for i in [0..mparameters.length[ do
+                               tpl.add mparameters[i].html_short_signature
+                               if i < mparameters.length - 1 then tpl.add ", "
+                       end
+                       tpl.add ")"
+               end
+               return tpl
+       end
+
+       redef fun html_signature do
                var tpl = new Template
                if not mparameters.is_empty then
                        tpl.add "("
                        for i in [0..mparameters.length[ do
-                               tpl.add mparameters[i].tpl_signature
+                               tpl.add mparameters[i].html_signature
                                if i < mparameters.length - 1 then tpl.add ", "
                        end
                        tpl.add ")"
                end
                if return_mtype != null then
                        tpl.add ": "
-                       tpl.add return_mtype.tpl_signature
+                       tpl.add return_mtype.html_signature
                end
                return tpl
        end
 end
 
 redef class MParameter
-       fun tpl_signature: Template do
+
+       # Returns `self` name and ellipsys if any.
+       fun html_short_signature: Template do
+               var tpl = new Template
+               tpl.add name
+               if is_vararg then tpl.add "..."
+               return tpl
+       end
+
+       # Returns `self` name with it's static type and ellipsys if any.
+       fun html_signature: Template do
                var tpl = new Template
                tpl.add "{name}: "
-               tpl.add mtype.tpl_signature
+               tpl.add mtype.html_signature
                if is_vararg then tpl.add "..."
                return tpl
        end
 end
 
 redef class ConcernsTree
-
-       private var seen = new HashSet[MConcern]
-
-       redef fun add(p, e) do
-               if seen.has(e) then return
-               seen.add e
-               super(p, e)
-       end
-
-       fun to_tpl: TplList do
-               var lst = new TplList.with_classes(["list-unstyled", "list-definition"])
+       # Render `self` as a hierarchical UnorderedList.
+       fun html_list: UnorderedList do
+               var lst = new UnorderedList
+               lst.css_classes.add "list-unstyled list-definition"
                for r in roots do
-                       var li = r.tpl_concern_item
+                       var li = r.html_concern_item
                        lst.add_li li
-                       build_list(r, li)
+                       build_html_list(r, li)
                end
                return lst
        end
 
-       private fun build_list(e: MConcern, li: TplListItem) do
+       # Build the html list recursively.
+       private fun build_html_list(e: MConcern, li: ListItem) do
                if not sub.has_key(e) then return
                var subs = sub[e]
-               var lst = new TplList.with_classes(["list-unstyled", "list-definition"])
+               var lst = new UnorderedList
+               lst.css_classes.add "list-unstyled list-definition"
                for e2 in subs do
                        if e2 isa MGroup and e2.is_root then
-                               build_list(e2, li)
+                               build_html_list(e2, li)
                        else
-                               var sli = e2.tpl_concern_item
+                               var sli = e2.html_concern_item
                                lst.add_li sli
-                               build_list(e2, sli)
+                               build_html_list(e2, sli)
                        end
                end
-               li.append lst
+               var text = new Template
+               text.add li.text
+               if not lst.is_empty then text.add lst
+               li.text = text
        end
 end
 
+redef class MConcern
+       # Return a li element for `self` that can be displayed in a concern list
+       private fun html_concern_item: ListItem do
+               var lnk = html_link
+               var tpl = new Template
+               tpl.add new Link.with_title("#concern:{nitdoc_id}", lnk.text, lnk.title)
+               var comment = html_short_comment
+               if comment != null then
+                       tpl.add ": "
+                       tpl.add comment
+               end
+               return new ListItem(tpl)
+       end
+end
 
 ################################################################################
 # Additions to `model_ext`.
 
 redef class MRawType
-       redef fun tpl_signature do
+       redef fun html_signature do
                var tpl = new Template
 
                for part in parts do
                        if part.target != null then
-                               tpl.add part.target.as(not null).tpl_link
+                               tpl.add part.target.as(not null).html_link
                        else
                                tpl.add part.text.html_escape
                        end
@@ -708,22 +699,13 @@ end
 
 redef class MInnerClass
        redef fun nitdoc_url do return inner.nitdoc_url
-       redef fun tpl_signature do return inner.tpl_signature
+       redef fun html_signature do return inner.html_signature
 end
 
 redef class MInnerClassDef
        redef fun nitdoc_url do return inner.nitdoc_url
 
-       redef fun tpl_anchor do return inner.tpl_anchor
-       redef fun tpl_link do return inner.tpl_link
-       redef fun tpl_signature do return inner.tpl_signature
-
-       redef fun tpl_definition do
-               var tpl = new TplClassDefinition
-               var mdoc = mdoc_or_fallback
-               if mdoc != null then
-                       tpl.comment = mdoc.tpl_comment
-               end
-               return tpl
-       end
+       redef fun html_link_to_anchor do return inner.html_link_to_anchor
+       redef fun html_link do return inner.html_link
+       redef fun html_signature do return inner.html_signature
 end
index 53fc0cf..a461ba0 100644 (file)
@@ -17,6 +17,11 @@ module html_templates
 
 import html_model
 import html::bootstrap
+import doc_phases::doc_structure
+import doc_phases::doc_hierarchies
+import doc_phases::doc_graphs
+import doc_phases::doc_intros_redefs
+import doc_phases::doc_lin
 
 # Renders the page as HTML.
 redef class DocPage
@@ -35,11 +40,7 @@ redef class DocPage
        var topmenu: DocTopMenu is writable, noinit
 
        # Sidebar template if any.
-       var sidebar: nullable TplSidebar = null is writable
-
-       # Content of the page in form a TplSection.
-       # TODO remove when other templates are migrated.
-       var sections = new Array[TplSection]
+       var sidebar: nullable DocSideBar = null is writable
 
        # Footer content if any.
        var footer: nullable Writable = null is writable
@@ -47,12 +48,6 @@ redef class DocPage
        # JS scripts to append at the end of the body
        var scripts = new Array[TplScript]
 
-       # Adds a section to this page.
-       # TODO remove when other templates are migrated.
-       fun add_section(section: TplSection) do
-               sections.add section
-       end
-
        # Renders the html `<head>`.
        private fun render_head do
                var css = (self.shareurl / "css").html_escape
@@ -75,23 +70,9 @@ redef class DocPage
                addn ">"
        end
 
-       # Renders the sidebar template.
-       #
-       # Sidebar is automatically populated with a summary of all sections
-       # TODO remove summary generation when other templates are migrated.
-       private fun render_sidebar do
-               if sidebar == null then return
-               var summary = new TplSummary.with_order(0)
-               for section in sections do
-                       section.render_summary summary
-               end
-               sidebar.boxes.add summary
-               add sidebar.as(not null)
-       end
-
        # Renders the footer and content.
        private fun render_content do
-               for section in sections do add section
+               add root
                if footer != null then
                        addn "<div class='well footer'>"
                        add footer.as(not null)
@@ -127,9 +108,10 @@ redef class DocPage
                add topmenu
                addn " </div>"
                addn " <div class='row' id='content'>"
+               var sidebar = self.sidebar
                if sidebar != null then
                        addn "<div class='col col-xs-3 col-lg-2'>"
-                       render_sidebar
+                       add sidebar
                        addn "</div>"
                        addn "<div class='col col-xs-9 col-lg-10' data-spy='scroll' data-target='.summary'>"
                        render_content
@@ -143,6 +125,16 @@ redef class DocPage
                addn "</div>"
                render_footer
        end
+
+       # Render table of content for this page.
+       fun html_toc: UnorderedList do
+               var lst = new UnorderedList
+               lst.css_classes.add "nav"
+               for child in root.children do
+                       child.render_toc_item(lst)
+               end
+               return lst
+       end
 end
 
 # Top menu bar template.
@@ -196,3 +188,419 @@ class DocTopMenu
                addn "</nav>"
        end
 end
+
+# Nitdoc sidebar template.
+class DocSideBar
+       super Template
+
+       # Sidebar contains `DocSideBox`.
+       var boxes = new Array[DocSideBox]
+
+       redef fun rendering do
+               if boxes.is_empty then return
+               addn "<div id='sidebar'>"
+               for box in boxes do add box
+               addn "</div>"
+       end
+end
+
+# Something that can be put in a DocSideBar.
+class DocSideBox
+       super Template
+
+       # Box HTML id, used for Bootstrap collapsing feature.
+       #
+       # Use `html_title.to_cmangle` by default.
+       var id: String is lazy do return title.write_to_string.to_cmangle
+
+       # Title of the box to display.
+       var title: Writable
+
+       # Content to display in the box.
+       var content: Writable
+
+       # Is the box opened by default?
+       #
+       # Otherwise, the user will have to clic on the title to display the content.
+       #
+       # Default is `true`.
+       var is_open = true is writable
+
+       redef fun rendering do
+               var open = ""
+               if is_open then open = "in"
+               addn "<div class='panel'>"
+               addn " <div class='panel-heading'>"
+               add "  <a data-toggle='collapse' data-parent='#sidebar'"
+               add "   data-target='#box_{id}' href='#'>"
+               add title
+               addn "  </a>"
+               addn " </div>"
+               addn " <div id='box_{id}' class='summary panel-body collapse {open}'>"
+               add content
+               addn " </div>"
+               addn "</div>"
+       end
+end
+
+redef class DocComposite
+       super Template
+
+       # HTML anchor id
+       var html_id: String is noinit, writable
+
+       # Title to display if any.
+       #
+       # This title can be decorated with HTML.
+       var html_title: nullable Writable is noinit, writable
+
+       # Subtitle to display if any.
+       var html_subtitle: nullable Writable is noinit, writable
+
+       # Render the element title and subtitle.
+       private fun render_title do
+               if html_title != null then
+               var header = new Header(hlvl, html_title.write_to_string)
+               header.css_classes.add "signature"
+               if hlvl == 2 then header.css_classes.add "well well-sm"
+               addn header
+               end
+               if html_subtitle != null then
+                       addn "<div class='info subtitle'>"
+                       addn html_subtitle.write_to_string
+                       addn "</div>"
+               end
+       end
+
+       # Render the element body.
+       private fun render_body do
+               for child in children do addn child.write_to_string
+       end
+
+       redef fun rendering do
+               if is_hidden then return
+               render_title
+               render_body
+       end
+
+       # Level <hX> for HTML heading.
+       private fun hlvl: Int do
+               if parent == null then return 0
+               return parent.hlvl + 1
+       end
+
+       # Is `self` not displayed in the page.
+       #
+       # By default, empty elements are hidden.
+       fun is_hidden: Bool do return is_empty
+
+       # A short, undecorated title that goes in the table of contents.
+       #
+       # By default, returns `html_title.to_s`, subclasses should redefine it.
+       var toc_title: String is lazy, writable do return html_title.to_s
+
+       # Is `self` hidden in the table of content?
+       var is_toc_hidden = false is writable
+
+       # Render this element in a table of contents.
+       private fun render_toc_item(lst: UnorderedList) do
+               if is_toc_hidden then return
+
+               var content = new Template
+               content.add new Link("#{html_id}", toc_title)
+
+               if not children.is_empty then
+                       var sublst = new UnorderedList
+                       sublst.css_classes.add "nav"
+                       for child in children do
+                               child.render_toc_item(sublst)
+                       end
+                       content.add sublst
+               end
+               lst.add_li new ListItem(content)
+       end
+end
+
+redef class DocSection
+       super BSComponent
+
+       redef fun rendering do
+               if is_hidden then
+                       addn "<a id=\"{html_id}\"></a>"
+                       return
+               end
+               addn "<section{render_css_classes} id=\"{html_id}\">"
+               render_title
+               render_body
+               addn "</section>"
+       end
+end
+
+redef class DocArticle
+       super BSComponent
+
+       redef fun rendering do
+               if is_hidden then return
+               addn "<article{render_css_classes} id=\"{html_id}\">"
+               render_title
+               render_body
+               addn "</article>"
+       end
+end
+
+redef class HomeArticle
+       redef var html_id = "article:home"
+       redef var html_title = "Overview"
+
+       # HTML content to display on the home page.
+       #
+       # This attribute is set by the `doc_render` phase who knows the context.
+       var content: nullable String is noinit, writable
+
+       redef fun render_body do
+               var content = self.content
+               if content != null then add content
+               super
+       end
+end
+
+redef class IndexArticle
+       redef var html_id = "article:index"
+       redef var html_title = "Index"
+       redef fun is_empty do
+               return mmodules.is_empty and mclasses.is_empty and mprops.is_empty
+       end
+
+       redef fun render_body do
+               addn "<div class='container-fluid'>"
+               addn " <div class='row'>"
+               render_list("Modules", mmodules)
+               render_list("Classes", mclasses)
+               render_list("Properties", mprops)
+               addn "</div>"
+               addn "</div>"
+       end
+
+       # Displays a list from the content of `mentities`.
+       private fun render_list(title: String, mentities: Array[MEntity]) do
+               if mentities.is_empty then return
+               addn "<div class='col-xs-4'>"
+               addn new Header(3, title)
+               var lst = new UnorderedList
+               for mentity in mentities do
+                       if mentity isa MProperty then
+                               var tpl = new Template
+                               tpl.add mentity.intro.html_link
+                               tpl.add " ("
+                               tpl.add mentity.intro.mclassdef.mclass.html_link
+                               tpl.add ")"
+                               lst.add_li new ListItem(tpl)
+                       else
+                               lst.add_li new ListItem(mentity.html_link)
+                       end
+               end
+               addn lst
+               addn "</div>"
+       end
+end
+
+redef class ProjectsSection
+       redef var html_id = "section:projects"
+       redef var html_title = "Projects"
+end
+
+redef class MEntityComposite
+       redef var html_id is lazy do return mentity.nitdoc_id
+       redef var html_title is lazy do return mentity.nitdoc_name
+end
+
+redef class MEntitySection
+       redef var html_id is lazy do return "section:{mentity.nitdoc_name}"
+       redef var html_title is lazy do return mentity.html_name
+       redef var html_subtitle is lazy do return mentity.html_declaration
+end
+
+redef class ConcernSection
+       redef var html_id is lazy do return "concern:{mentity.nitdoc_id}"
+       redef var html_title is lazy do return "in {mentity.nitdoc_name}"
+       redef fun is_toc_hidden do return is_empty
+end
+
+redef class ImportationListSection
+       redef var html_id is lazy do return "section:{mentity.nitdoc_id}.importation"
+       redef var html_title is lazy do return "Dependencies"
+end
+
+redef class InheritanceListSection
+       redef var html_id is lazy do return "section:{mentity.nitdoc_id}.inheritance"
+       redef var html_title is lazy do return "Inheritance"
+end
+
+redef class IntroArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.intro"
+       redef var html_title = null
+       redef var is_hidden = false
+       redef var is_toc_hidden = true
+
+       # Link to source to display if any.
+       var html_source_link: nullable Writable is noinit, writable
+
+       redef fun render_title do
+               var lnk = html_source_link
+               if lnk != null then
+                       add "<div class='source-link'>"
+                       add lnk
+                       addn "</div>"
+               end
+               super
+       end
+
+       redef fun render_body do
+               var comment = mentity.html_comment
+               if comment != null then addn comment
+               super
+       end
+end
+
+redef class ConcernsArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.concerns"
+       redef var html_title = "Concerns"
+       redef fun is_hidden do return concerns.is_empty
+       redef fun render_body do add concerns.html_list
+end
+
+redef class DefinitionListArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.definition-list"
+
+       redef var html_title is lazy do
+               var title = new Template
+               title.add mentity.html_icon
+               title.add mentity.html_link
+               return title
+       end
+
+       redef var html_subtitle is lazy do return mentity.html_namespace
+       redef var toc_title is lazy do return mentity.html_name
+end
+
+redef class DefinitionArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.definition"
+       redef var html_title is lazy do return mentity.html_name
+       redef var html_subtitle is lazy do return mentity.html_declaration
+       redef var is_hidden = false
+
+       # Does `self` display only it's title and no body?
+       #
+       # FIXME diff hack
+       var is_no_body: Bool = false is writable
+
+       # Does `self` display only the short content as definition?
+       #
+       # FIXME diff hack
+       var is_short_comment: Bool = false is writable
+
+       # Link to source to display if any.
+       var html_source_link: nullable Writable is noinit, writable
+
+       redef fun render_title do
+               var lnk = html_source_link
+               if lnk != null then
+                       add "<div class='source-link'>"
+                       add lnk
+                       addn "</div>"
+               end
+               super
+       end
+
+       redef fun render_body do
+               if not is_no_body then
+                       var comment
+                       if is_short_comment then
+                               comment = mentity.html_short_comment
+                       else
+                               comment = mentity.html_comment
+                       end
+                       if comment != null then addn comment
+               end
+               super
+       end
+end
+
+redef class HierarchyListArticle
+       redef var html_id is lazy do return "article:{list_title}_{mentity.nitdoc_id}.hierarchy"
+       redef var html_title is lazy do return list_title
+       redef fun is_empty do return mentities.is_empty
+       redef fun is_toc_hidden do return mentities.is_empty
+
+       redef fun render_body do
+               var lst = new UnorderedList
+               lst.css_classes.add "list-unstyled list-definition"
+               for mentity in mentities do
+                       lst.add_li mentity.html_list_item
+               end
+               addn lst
+       end
+end
+
+redef class IntrosRedefsListArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.intros_redefs"
+       redef var html_title is lazy do return list_title
+       redef fun is_hidden do return mentities.is_empty
+       redef var is_toc_hidden = true
+
+       redef fun render_body do
+               var lst = new UnorderedList
+               lst.css_classes.add "list-unstyled list-labeled"
+               for mentity in mentities do
+                       lst.add_li mentity.html_list_item
+               end
+               add lst
+       end
+end
+
+redef class DefinitionLinArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.lin"
+       redef var html_title is lazy do return "Linearization"
+       redef fun is_hidden do return mentities.is_empty
+       redef var is_toc_hidden = true
+
+       redef fun render_body do
+               var lst = new UnorderedList
+               lst.css_classes.add "list-unstyled list-labeled"
+               for mentity in mentities do
+                       if not mentity isa MPropDef then continue # TODO handle all mentities
+                       var tpl = new Template
+                       tpl.add mentity.mclassdef.html_namespace
+                       var comment = mentity.mclassdef.html_short_comment
+                       if comment != null then
+                               tpl.add ": "
+                               tpl.add comment
+                       end
+                       var li = new ListItem(tpl)
+                       li.css_classes.add "signature"
+                       lst.add_li li
+               end
+               add lst
+       end
+end
+
+redef class GraphArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.graph"
+       redef var html_title = null
+       redef var toc_title do return "Graph"
+       redef var is_hidden = false
+       redef var is_toc_hidden = true
+
+       # HTML map used to display link.
+       #
+       # This attribute is set by the `doc_render` phase who knows the context.
+       var map: String is noinit, writable
+
+       redef fun render_body do
+               addn "<div class=\"text-center\">"
+               addn " <img src='{id}.png' usemap='#{id}' style='margin:auto'"
+               addn "  alt='{graph_title}'/>"
+               add map
+               addn "</div>"
+       end
+end
index 495d4e6..e09a80f 100644 (file)
 module c
 
 import ffi_base
+import light_c
 
-redef class FFILanguageAssignationPhase
-       var c_language: FFILanguage = new CLanguage(self)
-end
-
-class CLanguage
-       super FFILanguage
-
-       redef fun identify_language(n) do return n.is_c
-
-       redef fun compile_module_block(block, ecc, mmodule)
-       do
-               if block.is_c_header then
-                       ecc.header_custom.add block.location.as_line_pragma
-                       ecc.header_custom.add "\n"
-                       ecc.header_custom.add block.code
-               else if block.is_c_body then
-                       ecc.body_impl.add block.location.as_line_pragma
-                       ecc.body_impl.add "\n"
-                       ecc.body_impl.add block.code
-               end
-       end
-
-       redef fun compile_extern_method(block, m, ecc, mmodule)
-       do
-               var fc = new ExternCFunction(m, mmodule)
-               fc.decls.add( block.location.as_line_pragma )
-               fc.exprs.add( block.code )
-               ecc.add_exported_function( fc )
-       end
-
-       redef fun compile_extern_class(block, m, ecc, mmodule) do end
-
-       redef fun get_ftype(block, m) do return new ForeignCType(block.code)
-
+redef class CLanguage
        redef fun compile_callback(callback, mmodule, mainmodule, ecc)
        do
                callback.compile_callback_to_c(mainmodule, ecc)
        end
 end
 
-redef class AExternCodeBlock
-       fun is_c: Bool do return language_name == null or
-               language_name_lowered == "c" or language_name_lowered.has_prefix( "c " )
-
-       fun is_c_body: Bool do return language_name == null or
-               language_name_lowered == "c" or language_name_lowered ==  "c body"
-
-       fun is_c_header: Bool do return language_name_lowered == "c header"
-end
-
-redef class Location
-       fun as_line_pragma: String do return "#line {line_start-1} \"{file.filename}\"\n"
-end
-
-redef class MModule
-       # FIXME make nullable the key of `cflags`, `ldflags` and `cppflags` when
-       # supported by the bootstrap
-
-       # Custom options for the C compiler (CFLAGS)
-       var cflags = new MultiHashMap[String, String]
-
-       # Custom options for the C linker (LDFLAGS)
-       var ldflags = new MultiHashMap[String, String]
-
-       # Additional libraries needed for the compilation
-       # Will be used with pkg-config
-       var pkgconfigs = new Array[String]
-end
-
-class ForeignCType
-       super ForeignType
-
-       redef var ctype: String
-end
-
 redef class NitniCallback
        fun compile_callback_to_c(mmodule: MModule, ffi_ccu: CCompilationUnit) do end
 end
 
-redef class Object
-       # Context when calling user C code from generated code
-       fun to_c_call_context: ToCCallContext do return once new ToCCallContext
-
-       # Context when calling generated code from user C code
-       fun from_c_call_context: FromCCallContext do return once new FromCCallContext
-end
-
 redef class MExplicitCall
        redef fun compile_callback_to_c(mmodule, ffi_ccu)
        do
@@ -116,41 +41,3 @@ redef class MExplicitCall
                ffi_ccu.body_decl.add("#define {friendly_cname} {full_cname}\n")
        end
 end
-
-# Context when calling user C code from generated code
-class ToCCallContext
-       super CallContext
-
-       # TODO: private init because singleton instance (see `to_c_call_context`)
-
-       redef fun name_mtype(mtype)
-       do
-               if mtype isa MClassType and mtype.mclass.kind == extern_kind then return "void *"
-               return mtype.cname
-       end
-end
-
-# Context when calling generated code from user C code
-class FromCCallContext
-       super CallContext
-
-       # TODO: private init because singleton instance (see `from_c_call_context`)
-
-       redef fun name_mtype(mtype) do return mtype.cname
-end
-
-class ExternCFunction
-       super CFunction
-
-       var method: AMethPropdef
-
-       init (method: AMethPropdef, mmodule: MModule)
-       do
-               self.method = method
-
-               var recv_mtype = method.mpropdef.mclassdef.bound_mtype
-               var csignature = method.mpropdef.mproperty.build_csignature(recv_mtype, mmodule, "___impl", long_signature, from_c_call_context)
-
-               super( csignature )
-       end
-end
index 6b53008..c0e826b 100644 (file)
@@ -17,7 +17,8 @@
 # Manages all extern classes and their associated foreign type.
 module extern_classes
 
-import ffi_base
+import light_ffi_base
+import modelize
 
 redef class ToolContext
        var extern_classes_typing_phase_ast: Phase = new ExternClassesTypingPhaseAst(self, [ffi_language_assignation_phase, modelize_class_phase])
index 93acf66..e58d32a 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# FFI concers common between the compilers and the interpreter.
-# Offers services to compile modules using foreign code. Mainly allows
-# to wrap foreign code in Nit methods.
+# Full FFI support, independent of the compiler
+#
+# The full FFI support all the features of the light FFI and more:
+#
+# * More foreign languages: **C++, Java and Objective-C**.
+# * **Callbacks** to Nit from foreign codes.
+#   The callbacks are declared in Nit using the `import` annotation on extern methods.
+#   They are then generated on demand for the target foreign language.
+# * **Static Nit types** in C for precise typing and static typing errors in C.
+# * **Propagating public code blocks** at the module level (C Header).
+#   This allows to use extern classes in foreign code in other modules
+#   without having to import the related headers.
+#   This is optional in C as it is easy to find the correct importation.
+#   However it is important in Java and other complex FFIs.
+# * **Reference pinning** of Nit objects from foreign code.
+#   This ensure that objects referenced from foreign code are not liberated by the GC.
+# * FFI **annotations**:
+#   * `cflags`, `ldflags` and `cppflags` pass arguments to the C and C++
+# compilers and linker.
+#   * `pkgconfig` calls the `pkg-config` program to get the arguments
+# to pass to the C copiler and linker.
+#   * `extra_java_files` adds Java source file to the compilation chain.
 module ffi
 
 import modelbuilder
@@ -33,19 +52,11 @@ import cpp
 import java
 import extra_java_files
 import objc
+intrude import light_ffi
 
 redef class MModule
-       # Does this module uses the FFI?
-       var uses_ffi: Bool = false
-
-       # C compilation unit for the FFI files
-       private var ffi_ccu: nullable CCompilationUnit = null
-
-       # Foreign language used in this AModule
-       private var present_languages = new HashSet[FFILanguage]
-
        # Complete the compilation of the FFI code
-       fun finalize_ffi_wrapper(compdir: String, mainmodule: MModule)
+       redef fun finalize_ffi_wrapper(compdir, mainmodule)
        do
                for language in ffi_callbacks.keys do
                        for callback in ffi_callbacks[language] do
@@ -60,82 +71,10 @@ redef class MModule
                        if mod.uses_ffi then ffi_ccu.header_custom.add("#include \"{mod.c_name}._ffi.h\"\n")
                end
 
-               var cflags = self.cflags[""].join(" ")
-
-               ffi_ccu.write_as_impl(self, compdir)
-               for filename in ffi_ccu.files do
-                       var f = new ExternCFile(filename, cflags)
-                       f.pkgconfigs.add_all pkgconfigs
-                       ffi_files.add(f)
-               end
-       end
-
-       # Avoid the compile a ffi propdef more than once
-       # See `AMethPropdef::compile_ffi_method`
-       # FIXME find a better way
-       private var compiled_ffi_methods = new HashSet[AMethPropdef]
-end
-
-redef class AModule
-
-       # Ensures all of the general foreign code of the module has been analyzed.
-       # Manages header blocks, extern class types and foreign dependancies between modules
-       fun ensure_compile_ffi_wrapper
-       do
-               var mmodule = mmodule
-               if mmodule == null or mmodule.ffi_ccu != null then return
-
-               # ready extern code compiler
-               var ffi_ccu = new CCompilationUnit
-               mmodule.ffi_ccu = ffi_ccu
-
-               # generate code
-               for block in n_extern_code_blocks do
-                       var language = block.language
-                       assert language != null
-                       mmodule.present_languages.add(language)
-                       language.compile_module_block(block, ffi_ccu, mmodule)
-               end
-
-               ffi_ccu.header_c_base.add( "#include \"{mmodule.c_name}._nitni.h\"\n" )
-
-               ffi_ccu.body_decl.add("#ifdef ANDROID\n")
-               ffi_ccu.body_decl.add(" #include <android/log.h>\n")
-               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) (void)__android_log_print(ANDROID_LOG_WARN, \"Nit\", __VA_ARGS__)\n")
-               ffi_ccu.body_decl.add("#else\n")
-               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) fprintf(stderr, __VA_ARGS__)\n")
-               ffi_ccu.body_decl.add("#endif\n")
-
-               for nclassdef in n_classdefs do
-                       # Does it declares an extern type?
-                       if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
-                               mmodule.uses_ffi = true
-                               var language = nclassdef.n_extern_code_block.language
-                               assert language != null
-                               mmodule.present_languages.add(language)
-                               nclassdef.n_extern_code_block.language.compile_extern_class(
-                                       nclassdef.n_extern_code_block.as(not null), nclassdef, ffi_ccu, mmodule)
-                       end
-               end
+               super
        end
 end
 
-redef class AMethPropdef
-       # Compile the necessary wrapper around this extern method or constructor
-       fun compile_ffi_method(mmodule: MModule)
-       do
-               assert n_extern_code_block != null
-
-               if mmodule.compiled_ffi_methods.has(self) then return
-               mmodule.compiled_ffi_methods.add self
-
-               var language = n_extern_code_block.language
-               assert language != null
-               mmodule.present_languages.add(language)
-               n_extern_code_block.language.compile_extern_method(
-                       n_extern_code_block.as(not null), self, mmodule.ffi_ccu.as(not null), mmodule)
-       end
-end
 
 redef class VerifyNitniCallbacksPhase
        redef fun process_npropdef(npropdef)
index b8a8103..77a982d 100644 (file)
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Tools and utilities for language targetted FFI implementations
+# Tools and utilities for implement FFI with different languages
 module ffi_base
 
 import c_tools
@@ -22,184 +22,17 @@ import parser
 import modelbuilder
 import nitni
 
-redef class ToolContext
-       var ffi_language_assignation_phase: Phase = new FFILanguageAssignationPhase(self, null)
-end
-
-class FFILanguageAssignationPhase
-       super Phase
-
-       # All supported languages
-       var languages = new Array[FFILanguage]
-
-       redef fun process_nmodule(nmodule)
-       do
-               for block in nmodule.n_extern_code_blocks do
-                       verify_foreign_code_on_node( block )
-               end
-       end
-
-       redef fun process_npropdef(npropdef)
-       do
-               if npropdef isa AMethPropdef then
-                       var code_block = npropdef.n_extern_code_block
-                       if code_block != null then
-                               verify_foreign_code_on_node( code_block )
-                       end
-               end
-       end
-
-       redef fun process_nclassdef(nclassdef)
-       do
-               if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
-                       verify_foreign_code_on_node( nclassdef.n_extern_code_block.as(not null) )
-               end
-       end
-
-       private fun verify_foreign_code_on_node(n: AExternCodeBlock)
-       do
-               var found = false
-               for v in languages do
-                       var identified = v.identify_language(n)
-                       if identified then
-                               if found and identified then
-                                       toolcontext.error(n.location, "FFI Error: two languages identified as possible handlers.")
-                               end
-                               n.language = v
-                               found = true
-                       end
-               end
-
-               if not found then toolcontext.error(n.location, "FFI Error: unsupported language.")
-       end
-end
+import light_ffi_base
 
 redef class MModule
-       var ffi_files = new Array[ExternFile]
-
        # Callbacks used by this module, classified by language
        var ffi_callbacks = new HashMap[FFILanguage, Set[NitniCallback]]
 end
 
-redef class AExternCodeBlock
-       fun language_name: nullable String do
-               if n_in_language == null then return null
-               return n_in_language.n_string.without_quotes
-       end
-       fun language_name_lowered: nullable String do
-               if language_name == null then return null
-               return language_name.to_lower
-       end
-
-       fun code: String do return n_extern_code_segment.without_guard
-
-       var language: nullable FFILanguage = null
-end
-
 # Visitor for a specific languages. Works kinda like a `Phase` and is executed
 # by a `Phase`.
-class FFILanguage
-       var ffi_language_assignation_phase: FFILanguageAssignationPhase
-
-       init
-       do
-               ffi_language_assignation_phase.languages.add(self)
-       end
-
-       # Is this `block` written in this language?
-       fun identify_language(block: AExternCodeBlock ): Bool is abstract
-
-       # Generate wrapper code for this module/header code block
-       fun compile_module_block(block: AExternCodeBlock, ecc: CCompilationUnit, mmodule: MModule) is abstract
-
-       # Generate wrapper code for this extern method
-       fun compile_extern_method(block: AExternCodeBlock, m: AMethPropdef,
-               ecc: CCompilationUnit, nmodule: MModule) is abstract
-
-       # Generate wrapper code for this extern class
-       fun compile_extern_class(block: AExternCodeBlock, m: AClassdef,
-               ecc: CCompilationUnit, mmodule: MModule) is abstract
-
-       # Get the foreign type of this extern class definition
-       fun get_ftype(block: AExternCodeBlock, m: AClassdef): ForeignType is abstract
-
+redef class FFILanguage
        # Generate the code to offer this callback if foreign code
        fun compile_callback(callback: NitniCallback, mmodule: MModule,
                mainmmodule: MModule, ecc: CCompilationUnit) is abstract
-
-       # Complete compilation of generated code
-       fun compile_to_files(mmodule: MModule, directory: String) do end
-end
-
-redef class TString
-       # Returns the content of this node without both of the surrounding "
-       fun without_quotes: String
-       do
-               assert text.length >= 2
-               return text.substring(1, text.length-2)
-       end
-end
-
-redef class TExternCodeSegment
-       # Returns the content of this node without the surrounding `{ and `}
-       fun without_guard: String
-       do
-               assert text.length >= 4
-               return text.substring(2, text.length-4)
-       end
-end
-
-redef class CCompilationUnit
-       fun write_as_impl(mmodule: MModule, compdir: String)
-       do
-               var base_name = "{mmodule.c_name}._ffi"
-
-               var h_file = "{base_name}.h"
-               var guard = "{mmodule.c_name.to_upper}_NIT_H"
-               write_header_to_file(mmodule, "{compdir}/{h_file}", new Array[String], guard)
-
-               var c_file = "{base_name}.c"
-               write_body_to_file(mmodule, "{compdir}/{c_file}", ["<stdlib.h>", "<stdio.h>", "\"{h_file}\""])
-
-               files.add( "{compdir}/{c_file}" )
-       end
-
-       fun write_header_to_file(mmodule: MModule, file: String, includes: Array[String], guard: String)
-       do
-               var stream = new FileWriter.open( file )
-
-               # header comments
-               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
-
-               stream.write( module_info )
-
-               stream.write( "#ifndef {guard}\n" )
-               stream.write( "#define {guard}\n\n" )
-
-               for incl in includes do stream.write( "#include {incl}\n" )
-
-               compile_header_core( stream )
-
-               # header file guard close
-               stream.write( "#endif\n" )
-               stream.close
-       end
-
-       fun write_body_to_file(mmodule: MModule, file: String, includes: Array[String])
-       do
-               var stream = new FileWriter.open(file)
-
-               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
-
-               stream.write( module_info )
-               for incl in includes do stream.write( "#include {incl}\n" )
-
-               compile_body_core( stream )
-
-               stream.close
-       end
-end
-
-class ForeignType
-       fun ctype: String do return "void*"
 end
index 830e68c..ae37d9d 100644 (file)
@@ -424,7 +424,7 @@ redef class MExplicitCall
                var csignature = mproperty.build_c_implementation_signature(recv_mtype, mmodule, "___indirect", long_signature, from_java_call_context)
                var cf = new CFunction("JNIEXPORT {csignature}")
                cf.exprs.add "\t{mproperty.build_ccall(recv_mtype, mainmodule, null, long_signature, from_java_call_context, null)}\n"
-               ccu.add_local_function cf
+               ccu.add_non_static_local_function cf
 
                # In Java, declare the extern method as a private static local method
                var java_signature = mproperty.build_csignature(recv_mtype, mainmodule, null, short_signature, java_call_context)
@@ -651,3 +651,17 @@ end
 private fun java_call_context: JavaCallContext do return new JavaCallContext
 private fun to_java_call_context: ToJavaCallContext do return new ToJavaCallContext
 private fun from_java_call_context: FromJavaCallContext do return new FromJavaCallContext
+
+redef class CCompilationUnit
+       # Similar to `add_local_function` but not `static`
+       #
+       # Used when the signature contains a visibility attribute.
+       private fun add_non_static_local_function(c_function: CFunction)
+       do
+               body_decl.add c_function.signature
+               body_decl.add ";\n"
+
+               body_impl.add "\n"
+               body_impl.add c_function.to_writer
+       end
+end
diff --git a/src/ffi/light_c.nit b/src/ffi/light_c.nit
new file mode 100644 (file)
index 0000000..86ec651
--- /dev/null
@@ -0,0 +1,138 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2012-2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# 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.
+
+# Support for nesting C code within a Nit program using its FFI
+module light_c
+
+import modelize::modelize_property
+
+import light_ffi_base
+
+redef class FFILanguageAssignationPhase
+       var c_language: FFILanguage = new CLanguage(self)
+end
+
+class CLanguage
+       super FFILanguage
+
+       redef fun identify_language(n) do return n.is_c
+
+       redef fun compile_module_block(block, ecc, mmodule)
+       do
+               if block.is_c_header then
+                       ecc.header_custom.add block.location.as_line_pragma
+                       ecc.header_custom.add "\n"
+                       ecc.header_custom.add block.code
+               else if block.is_c_body then
+                       ecc.body_impl.add block.location.as_line_pragma
+                       ecc.body_impl.add "\n"
+                       ecc.body_impl.add block.code
+               end
+       end
+
+       redef fun compile_extern_method(block, m, ecc, mmodule)
+       do
+               var fc = new ExternCFunction(m, mmodule)
+               fc.decls.add( block.location.as_line_pragma )
+               fc.exprs.add( block.code )
+               ecc.add_exported_function( fc )
+       end
+
+       redef fun compile_extern_class(block, m, ecc, mmodule) do end
+
+       redef fun get_ftype(block, m) do return new ForeignCType(block.code)
+end
+
+redef class AExternCodeBlock
+       fun is_c: Bool do return language_name == null or
+               language_name_lowered == "c" or language_name_lowered.has_prefix( "c " )
+
+       fun is_c_body: Bool do return language_name == null or
+               language_name_lowered == "c" or language_name_lowered ==  "c body"
+
+       fun is_c_header: Bool do return language_name_lowered == "c header"
+end
+
+redef class Location
+       fun as_line_pragma: String do return "#line {line_start-1} \"{file.filename}\"\n"
+end
+
+redef class MModule
+       # FIXME make nullable the key of `cflags`, `ldflags` and `cppflags` when
+       # supported by the bootstrap
+
+       # Custom options for the C compiler (CFLAGS)
+       var cflags = new MultiHashMap[String, String]
+
+       # Custom options for the C linker (LDFLAGS)
+       var ldflags = new MultiHashMap[String, String]
+
+       # Additional libraries needed for the compilation
+       # Will be used with pkg-config
+       var pkgconfigs = new Array[String]
+end
+
+class ForeignCType
+       super ForeignType
+
+       redef var ctype: String
+end
+
+redef class Object
+       # Context when calling user C code from generated code
+       fun to_c_call_context: ToCCallContext do return once new ToCCallContext
+
+       # Context when calling generated code from user C code
+       fun from_c_call_context: FromCCallContext do return once new FromCCallContext
+end
+
+# Context when calling user C code from generated code
+class ToCCallContext
+       super CallContext
+
+       # TODO: private init because singleton instance (see `to_c_call_context`)
+
+       redef fun name_mtype(mtype)
+       do
+               if mtype isa MClassType and mtype.mclass.kind == extern_kind then return "void *"
+               return mtype.cname
+       end
+end
+
+# Context when calling generated code from user C code
+class FromCCallContext
+       super CallContext
+
+       # TODO: private init because singleton instance (see `from_c_call_context`)
+
+       redef fun name_mtype(mtype) do return mtype.cname
+end
+
+class ExternCFunction
+       super CFunction
+
+       var method: AMethPropdef
+
+       init (method: AMethPropdef, mmodule: MModule)
+       do
+               self.method = method
+
+               var recv_mtype = method.mpropdef.mclassdef.bound_mtype
+               var csignature = method.mpropdef.mproperty.build_csignature(recv_mtype, mmodule, "___impl", long_signature, from_c_call_context)
+
+               super( csignature )
+       end
+end
diff --git a/src/ffi/light_ffi.nit b/src/ffi/light_ffi.nit
new file mode 100644 (file)
index 0000000..2245a92
--- /dev/null
@@ -0,0 +1,131 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# 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.
+
+# Light FFI support, independent of the compiler
+#
+# The light FFI offers only basic FFI features:
+#
+# * **Extern methods** implemented in C, nested within the Nit code.
+#   The body of these method is copied directly to the generated C files for compilation.
+#   Also supports extern `new` factories.
+# * Module level **C code blocks**, both "C Body" (the default) and "C Header".
+#   They will be copied to the beginning of the generated C files.
+# * Automatic transformation of Nit **primitive types** from/to their equivalent in C.
+# * **Extern classes** to create a Nit class around a C pointer.
+#   Allows to specify the equivalent C type of the Nit extern class.
+#
+# These limited features should be easy to implement in new/alternative engines
+# to quickly achieve a bootstrap. For this reason, core features of the Nit
+# standard library should be limited to use the light FFI.
+module light_ffi
+
+import modelbuilder
+
+import nitni::nitni_utilities
+
+intrude import light_ffi_base
+import extern_classes
+import light_c
+
+redef class MModule
+       # Does this module uses the FFI?
+       var uses_ffi: Bool = false
+
+       # C compilation unit for the FFI files
+       private var ffi_ccu: nullable CCompilationUnit = null
+
+       # Foreign language used in this AModule
+       private var present_languages = new HashSet[FFILanguage]
+
+       # Complete the compilation of the FFI code
+       fun finalize_ffi_wrapper(compdir: String, mainmodule: MModule)
+       do
+               var cflags = self.cflags[""].join(" ")
+
+               ffi_ccu.write_as_impl(self, compdir)
+               for filename in ffi_ccu.files do
+                       var f = new ExternCFile(filename, cflags)
+                       f.pkgconfigs.add_all pkgconfigs
+                       ffi_files.add(f)
+               end
+       end
+
+       # Avoid the compile a ffi propdef more than once
+       # See `AMethPropdef::compile_ffi_method`
+       # FIXME find a better way
+       private var compiled_ffi_methods = new HashSet[AMethPropdef]
+end
+
+redef class AModule
+
+       # Ensures all of the general foreign code of the module has been analyzed.
+       # Manages header blocks, extern class types and foreign dependancies between modules
+       fun ensure_compile_ffi_wrapper
+       do
+               var mmodule = mmodule
+               if mmodule == null or mmodule.ffi_ccu != null then return
+
+               # ready extern code compiler
+               var ffi_ccu = new CCompilationUnit
+               mmodule.ffi_ccu = ffi_ccu
+
+               # generate code
+               for block in n_extern_code_blocks do
+                       var language = block.language
+                       assert language != null
+                       mmodule.present_languages.add(language)
+                       language.compile_module_block(block, ffi_ccu, mmodule)
+               end
+
+               ffi_ccu.header_c_base.add( "#include \"{mmodule.c_name}._nitni.h\"\n" )
+
+               ffi_ccu.body_decl.add("#ifdef ANDROID\n")
+               ffi_ccu.body_decl.add(" #include <android/log.h>\n")
+               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) (void)__android_log_print(ANDROID_LOG_WARN, \"Nit\", __VA_ARGS__)\n")
+               ffi_ccu.body_decl.add("#else\n")
+               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) fprintf(stderr, __VA_ARGS__)\n")
+               ffi_ccu.body_decl.add("#endif\n")
+
+               for nclassdef in n_classdefs do
+                       # Does it declares an extern type?
+                       if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
+                               mmodule.uses_ffi = true
+                               var language = nclassdef.n_extern_code_block.language
+                               assert language != null
+                               mmodule.present_languages.add(language)
+                               nclassdef.n_extern_code_block.language.compile_extern_class(
+                                       nclassdef.n_extern_code_block.as(not null), nclassdef, ffi_ccu, mmodule)
+                       end
+               end
+       end
+end
+
+redef class AMethPropdef
+       # Compile the necessary wrapper around this extern method or constructor
+       fun compile_ffi_method(mmodule: MModule)
+       do
+               assert n_extern_code_block != null
+
+               if mmodule.compiled_ffi_methods.has(self) then return
+               mmodule.compiled_ffi_methods.add self
+
+               var language = n_extern_code_block.language
+               assert language != null
+               mmodule.present_languages.add(language)
+               n_extern_code_block.language.compile_extern_method(
+                       n_extern_code_block.as(not null), self, mmodule.ffi_ccu.as(not null), mmodule)
+       end
+end
diff --git a/src/ffi/light_ffi_base.nit b/src/ffi/light_ffi_base.nit
new file mode 100644 (file)
index 0000000..6791e5c
--- /dev/null
@@ -0,0 +1,214 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2012 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# 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.
+
+# Tools and utilities for implement FFI with different languages
+module light_ffi_base
+
+import c_tools
+import parser
+import modelbuilder
+import nitni::nitni_utilities
+
+redef class ToolContext
+       # Phase that assign a `FFILanguage` to all `AExternCodeBlock`
+       var ffi_language_assignation_phase: Phase = new FFILanguageAssignationPhase(self, null)
+end
+
+# Phase that assign a `FFILanguage` to all `AExternCodeBlock`
+#
+# It will also report errors when using an unknown foreign langages.
+class FFILanguageAssignationPhase
+       super Phase
+
+       # All supported languages
+       var languages = new Array[FFILanguage]
+
+       redef fun process_nmodule(nmodule)
+       do
+               for block in nmodule.n_extern_code_blocks do
+                       verify_foreign_code_on_node( block )
+               end
+       end
+
+       redef fun process_npropdef(npropdef)
+       do
+               if npropdef isa AMethPropdef then
+                       var code_block = npropdef.n_extern_code_block
+                       if code_block != null then
+                               verify_foreign_code_on_node( code_block )
+                       end
+               end
+       end
+
+       redef fun process_nclassdef(nclassdef)
+       do
+               if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
+                       verify_foreign_code_on_node( nclassdef.n_extern_code_block.as(not null) )
+               end
+       end
+
+       private fun verify_foreign_code_on_node(n: AExternCodeBlock)
+       do
+               var found = false
+               for v in languages do
+                       var identified = v.identify_language(n)
+                       if identified then
+                               if found and identified then
+                                       toolcontext.error(n.location, "FFI Error: two languages identified as possible handlers.")
+                               end
+                               n.language = v
+                               found = true
+                       end
+               end
+
+               if not found then toolcontext.error(n.location, "FFI Error: unsupported language.")
+       end
+end
+
+redef class MModule
+       # All FFI files linked to this module
+       var ffi_files = new Array[ExternFile]
+end
+
+redef class AExternCodeBlock
+       # User entered name for the language of this block
+       fun language_name: nullable String do
+               if n_in_language == null then return null
+               return n_in_language.n_string.without_quotes
+       end
+
+       # `language_name`, in lower case
+       protected fun language_name_lowered: nullable String do
+               if language_name == null then return null
+               return language_name.to_lower
+       end
+
+       # User entered foreign code in the block
+       fun code: String do return n_extern_code_segment.without_guard
+
+       # `FFILanguage` assigned to this block
+       var language: nullable FFILanguage = null
+end
+
+# Visitor for a specific languages. Works kinda like a `Phase` and is executed
+# by a `Phase`.
+class FFILanguage
+       # `FFILanguageAssignationPhase` assigning `self` to `AExternCodeBlock`s
+       var ffi_language_assignation_phase: FFILanguageAssignationPhase
+
+       init
+       do
+               ffi_language_assignation_phase.languages.add(self)
+       end
+
+       # Is this `block` written in this language?
+       fun identify_language(block: AExternCodeBlock ): Bool is abstract
+
+       # Generate wrapper code for this module/header code block
+       fun compile_module_block(block: AExternCodeBlock, ecc: CCompilationUnit, mmodule: MModule) is abstract
+
+       # Generate wrapper code for this extern method
+       fun compile_extern_method(block: AExternCodeBlock, m: AMethPropdef,
+               ecc: CCompilationUnit, nmodule: MModule) is abstract
+
+       # Generate wrapper code for this extern class
+       fun compile_extern_class(block: AExternCodeBlock, m: AClassdef,
+               ecc: CCompilationUnit, mmodule: MModule) is abstract
+
+       # Get the foreign type of this extern class definition
+       fun get_ftype(block: AExternCodeBlock, m: AClassdef): ForeignType is abstract
+
+       # Complete compilation of generated code
+       fun compile_to_files(mmodule: MModule, directory: String) do end
+end
+
+redef class TString
+       # Returns the content of this node without both of the surrounding "
+       fun without_quotes: String
+       do
+               assert text.length >= 2
+               return text.substring(1, text.length-2)
+       end
+end
+
+redef class TExternCodeSegment
+       # Returns the content of this node without the surrounding `{ and `}
+       fun without_guard: String
+       do
+               assert text.length >= 4
+               return text.substring(2, text.length-4)
+       end
+end
+
+redef class CCompilationUnit
+       # Compile as `_ffi` files which contains the implementation of extern methods
+       fun write_as_impl(mmodule: MModule, compdir: String)
+       do
+               var base_name = "{mmodule.c_name}._ffi"
+
+               var h_file = "{base_name}.h"
+               var guard = "{mmodule.c_name.to_upper}_NIT_H"
+               write_header_to_file(mmodule, "{compdir}/{h_file}", new Array[String], guard)
+
+               var c_file = "{base_name}.c"
+               write_body_to_file(mmodule, "{compdir}/{c_file}", ["<stdlib.h>", "<stdio.h>", "\"{h_file}\""])
+
+               files.add( "{compdir}/{c_file}" )
+       end
+
+       # Write the header part to `file` including all `includes` using the `guard`
+       fun write_header_to_file(mmodule: MModule, file: String, includes: Array[String], guard: String)
+       do
+               var stream = new FileWriter.open( file )
+
+               # header comments
+               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
+
+               stream.write( module_info )
+
+               stream.write( "#ifndef {guard}\n" )
+               stream.write( "#define {guard}\n\n" )
+
+               for incl in includes do stream.write( "#include {incl}\n" )
+
+               compile_header_core( stream )
+
+               # header file guard close
+               stream.write( "#endif\n" )
+               stream.close
+       end
+
+       # Write the body part to `file` including all `includes`
+       fun write_body_to_file(mmodule: MModule, file: String, includes: Array[String])
+       do
+               var stream = new FileWriter.open(file)
+
+               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
+
+               stream.write( module_info )
+               for incl in includes do stream.write( "#include {incl}\n" )
+
+               compile_body_core( stream )
+
+               stream.close
+       end
+end
+
+# Foreign equivalent types of extern classes
+class ForeignType
+       # C type of `self`, by default it is `void*`
+       fun ctype: String do return "void*"
+end
index 28e36bd..68ea75b 100644 (file)
@@ -26,6 +26,7 @@ import deriving
 import check_annotation
 import glsl_validation
 import parallelization_phase
+import i18n_phase
 
 redef class ToolContext
        # FIXME: there is conflict in linex in nitc, so use this trick to force invocation
diff --git a/src/frontend/i18n_phase.nit b/src/frontend/i18n_phase.nit
new file mode 100644 (file)
index 0000000..60bcdf9
--- /dev/null
@@ -0,0 +1,218 @@
+# 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.
+
+# Basic support of internationalization through the generation of id-to-string tables
+module i18n_phase
+
+intrude import literal
+private import annotation
+private import parser_util
+import astbuilder
+
+redef class ToolContext
+       # Main phase of `language`
+       var localize_phase: Phase = new I18NPhase(self, [literal_phase])
+end
+
+private class I18NPhase
+       super Phase
+
+       redef fun process_annotated_node(nmodule, nat) do
+               if not nat.name == "i18n" then return
+
+               if not nmodule isa AModuledecl then
+                       toolcontext.error(nmodule.location, "Error: The localized language can only be used on module declarations.")
+                       return
+               end
+
+               var domain = nmodule.n_name.n_id.text
+
+               var lang: nullable String = null
+               if nat.n_args.length > 0 then
+                       lang = nat.arg_as_string(toolcontext.modelbuilder)
+                       if lang == null then return
+               end
+
+               var module_dir = nmodule.location.file.filename.dirname.realpath
+               var locale_dir = module_dir / "languages"
+
+               if not locale_dir.file_exists then locale_dir.mkdir
+
+               var amodule = nmodule.parent.as(AModule)
+
+               var vi = new StringFinder(domain, locale_dir, toolcontext, amodule)
+               vi.enter_visit(amodule)
+
+               var module_name = nmodule.location.file.filename.basename(".nit")
+
+               var pot_path = locale_dir / module_name
+               var arr = vi.strings.values.to_a
+               var po = new POFile.with_strings(arr)
+               po.write_template(pot_path)
+
+               if lang != null then
+                       for i in po.strings do
+                               i.msgstr = i.msgid
+                       end
+
+                       var lang_dir = locale_dir / lang
+                       if not lang_dir.file_exists then lang_dir.mkdir
+
+                       var messages_dir = lang_dir / "LC_MESSAGES"
+                       if not messages_dir.file_exists then messages_dir.mkdir
+
+                       po.write_to_file(messages_dir / module_name)
+               end
+
+               var lit = new LiteralVisitor(toolcontext)
+               lit.enter_visit(amodule)
+       end
+end
+
+private class StringFinder
+       super Visitor
+
+       # Strings in the file, used to generate .pot and .po files
+       var strings = new HashMap[String, PObject]
+
+       # Domain of the strings to internationalize
+       var domain: String
+
+       # Location of the languages file
+       var languages_location: String
+
+       # Context for the visitor, used only for the parse_expr
+       var toolcontext: ToolContext
+
+       # The module we are working on
+       var amodule: AModule
+
+       redef fun visit(n)
+       do
+               n.accept_string_finder(self)
+               n.visit_all(self)
+       end
+
+       redef fun enter_visit(e) do
+               if e isa AAnnotation then return
+               super
+       end
+
+       # Adds a String to the list of strings of the module
+       #
+       # The string needs to be pre-formatted to C standards (escape_to_c)
+       fun add_string(s: String, loc: Location) do
+               var locstr = "{amodule.mmodule.mgroup.name}::{amodule.mmodule.name} {loc.line_start}--{loc.column_start}:{loc.column_end}"
+               if not strings.has_key(s) then
+                       var po = new PObject([locstr], s, "")
+                       strings[s] = po
+               else
+                       strings[s].locations.push locstr
+               end
+       end
+end
+
+redef class ANode
+       private fun accept_string_finder(v: StringFinder) do end
+end
+
+redef class AStringExpr
+
+       redef fun accept_string_finder(v) do
+               var str = value.as(not null).escape_to_c
+               var parse = v.toolcontext.parse_expr("\"{str}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").unescape_nit")
+               replace_with(parse)
+               v.add_string(str, location)
+       end
+end
+
+redef class ASuperstringExpr
+
+       redef fun accept_string_finder(v) do
+               var fmt = ""
+               var exprs = new Array[AExpr]
+               for i in n_exprs do
+                       if i isa AStringFormExpr then
+                               fmt += i.value.as(not null)
+                       else
+                               fmt += "%"
+                               exprs.push i
+                               fmt += exprs.length.to_s
+                       end
+               end
+               fmt = fmt.escape_to_c
+               v.add_string(fmt, location)
+               var parse = v.toolcontext.parse_expr("\"{fmt}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").unescape_nit.format()")
+               if not parse isa ACallExpr then
+                       v.toolcontext.error(location, "Fatal error in i18n annotation, the parsed superstring could not be generated properly")
+                       return
+               end
+               var parse_exprs = parse.n_args.n_exprs
+               parse_exprs.add_all exprs
+               replace_with parse
+       end
+end
+
+# .po file entry
+#
+# Locations are optional, they just serve for translation purposes
+# to help the translator with the context of the message if necessary
+#
+# msgid and msgstr are the map of translate to translated strings in the po file.
+class PObject
+       # Array since the same string can be encountered at several places
+       var locations: Array[String]
+       # Identifier of the string to translate (i.e. the string itself)
+       var msgid: String is writable
+       # Translation of the string
+       var msgstr: String is writable
+end
+
+# A GNU gettext .po/.pot file
+class POFile
+       super Writable
+
+       # Map of the strings's `msgid` and `msgstr`
+       #
+       # Read from a PO file
+       var strings: Array[PObject]
+
+       # Creates a PO file with strings built-in
+       init with_strings(sm: Array[PObject])do
+               strings = new Array[PObject].with_capacity(sm.length)
+               strings.add_all sm
+       end
+
+       redef fun write_to_file(path) do
+               if not path.has_suffix(".po") then path += ".po"
+               super path
+       end
+
+       redef fun write_to(ofs) do
+               for i in strings do
+                       ofs.write("#: {i.locations.join(", ")}\n")
+                       ofs.write("msgid \"{i.msgid}\"\n")
+                       ofs.write("msgstr \"{i.msgstr}\"\n\n")
+               end
+               ofs.write("# Generated file, do not modify\n")
+       end
+
+       # Writes the information of the POFile to a .pot template file
+       fun write_template(path: String) do
+               if not path.has_suffix(".pot") then path += ".pot"
+               var f = new FileWriter.open(path)
+               write_to(f)
+               f.close
+       end
+end
index 2d15d82..08583da 100644 (file)
@@ -42,11 +42,6 @@ private class ParallelizationPhase
 
                #TODO: check for self calls
 
-               if nmethdef.n_signature.n_type != null then
-                       toolcontext.error(nat.location, "Error: functions not supported yet.")
-                       return
-               end
-
                # Get the module associated with this method
                var amod = nmethdef.parent.parent
                assert amod isa AModule
@@ -65,6 +60,18 @@ private class ParallelizationPhase
                        classname += nmethdef.n_methid.as(AIdMethid).n_id.text
                end
 
+               # Handle methods with a return value
+               var has_rvalue = nmethdef.n_signature.n_type != null
+               var vtype = ""
+               if has_rvalue then
+                       vtype = "redef type E: " + nmethdef.n_signature.n_type.n_id.text
+               end
+               # create a return type
+               var n_id = new TClassid
+               n_id.text = classname
+               var n_type = new AType
+               n_type.n_id = n_id
+               nmethdef.n_signature.n_type = n_type
 
                var params = new Array[String]
                # case if the method has parameters
@@ -82,6 +89,8 @@ var {{{param.n_id.text}}} : {{{param.n_type.n_id.text}}}
 class {{{classname}}}
        super Thread
 
+       {{{vtype}}}
+
        {{{params.join("\n")}}}
        redef fun main do
        end
@@ -102,11 +111,12 @@ end
                mainfun.n_block = nmethdef.n_block
 
                # Add "return null" to the end of the `main` function
-               var s_nullreturn = "return null"
-               var nullreturn = toolcontext.parse_something(s_nullreturn)
-               assert nullreturn isa AExpr
-               mainfun.n_block.as(ABlockExpr).n_expr.add(nullreturn)
-
+               if not has_rvalue then
+                       var s_nullreturn = "return null"
+                       var nullreturn = toolcontext.parse_something(s_nullreturn)
+                       assert nullreturn isa AExpr
+                       mainfun.n_block.as(ABlockExpr).n_expr.add(nullreturn)
+               end
 
                # Create new body for the annotated fun
                var s_newbody : String
@@ -118,11 +128,13 @@ end
                        s_newbody ="""
 var thread = new {{{classname}}}({{{init_params.join(",")}}})
 thread.start
+return thread
 """
                else
                        s_newbody = """
 var thread = new {{{classname}}}
 thread.start
+return thread
 """
                end
 
index cc12d01..885d794 100644 (file)
@@ -40,6 +40,12 @@ redef class AModule
        do
                var v = new SimpleMiscVisitor(toolcontext)
                v.enter_visit(self)
+
+               var t = location.file.first_token
+               while t != null do
+                       t.accept_simple_misc_token(v)
+                       t = t.next_token
+               end
        end
 end
 
@@ -73,6 +79,12 @@ redef class ANode
        private fun after_simple_misc(v: SimpleMiscVisitor) do end
 end
 
+redef class Token
+       private fun accept_simple_misc_token(v: SimpleMiscVisitor)
+       do
+       end
+end
+
 redef class ASignature
        redef fun after_simple_misc(v)
        do
@@ -168,3 +180,25 @@ redef class AOnceExpr
                v.once_count = v.once_count - 1
        end
 end
+
+redef class TSemi
+       redef fun accept_simple_misc_token(v)
+       do
+               var n = next_token
+               var p = prev_token
+               if
+                       n == null or
+                       n isa TEol or
+                       n isa EOF or
+                       n isa TComment or
+                       p == null or
+                       p isa TEol or
+                       p isa EOF or
+                       p isa TComment or
+                       p isa TSemi
+               then
+                       v.warning(self, "semi", "Warning: superfluous `;`.")
+                       return
+               end
+       end
+end
index 9b821e4..b444dd8 100644 (file)
@@ -1897,6 +1897,13 @@ redef class AVarargExpr
        end
 end
 
+redef class ANamedargExpr
+       redef fun expr(v)
+       do
+               return v.expr(self.n_expr)
+       end
+end
+
 redef class ADebugTypeExpr
        redef fun stmt(v)
        do
index 1ee1db2..3209720 100644 (file)
@@ -48,6 +48,9 @@ import mclasses_metrics
 import modelize
 
 redef class ToolContext
+       # Compute MENDEL metrics.
+       #
+       # See `mendel_metrics` module documentation.
        var mendel_metrics_phase: Phase = new MendelMetricsPhase(self, null)
 end
 
@@ -81,24 +84,28 @@ private class MendelMetricsPhase
                metrics.collect(mclasses)
                if csv then metrics.to_csv.save("{out}/mendel.csv")
 
-               print toolcontext.format_h4("\tlarge mclasses (threshold: {cnblp.threshold})")
-               for mclass in cnblp.above_threshold do
-                       print toolcontext.format_p("\t   {mclass.name}: {cnblp.values[mclass]}")
+               var threshold = cnblp.threshold
+               print toolcontext.format_h4("\tlarge mclasses (threshold: {threshold})")
+               for mclass in cnblp.sort do
+                       var val = cnblp.values[mclass]
+                       if val.to_f < threshold then break
+                       print toolcontext.format_p("\t   {mclass.name}: {val}")
                end
 
-               print toolcontext.format_h4("\tbudding mclasses (threshold: {cnvi.threshold})")
-               for mclass in cnvi.above_threshold do
-                       print toolcontext.format_p("\t   {mclass.name}: {cnvi.values[mclass]}")
+               threshold = cnvi.threshold
+               print toolcontext.format_h4("\tbudding mclasses (threshold: {threshold})")
+               for mclass in cnvi.sort do
+                       var val = cnvi.values[mclass]
+                       if val.to_f < threshold then break
+                       print toolcontext.format_p("\t   {mclass.name}: {val}")
                end
 
-               print toolcontext.format_h4("\tblooming mclasses (threshold: {cnvs.threshold})")
-               for mclass in cnvs.above_threshold do
-                       print toolcontext.format_p("\t   {mclass.name}: {cnvs.values[mclass]}")
-               end
-
-               print toolcontext.format_h4("\tblooming mclasses (threshold: {cnvs.threshold})")
-               for mclass in cnvs.above_threshold do
-                       print toolcontext.format_p("\t   {mclass.name}: {cnvs.values[mclass]}")
+               threshold = cnvs.threshold
+               print toolcontext.format_h4("\tblooming mclasses (threshold: {threshold})")
+               for mclass in cnvs.sort do
+                       var val = cnvs.values[mclass]
+                       if val.to_f < threshold then break
+                       print toolcontext.format_p("\t   {mclass.name}: {val}")
                end
 
                if csv then
@@ -130,8 +137,8 @@ class CBMS
        redef fun name do return "cbms"
        redef fun desc do return "branch mean size, mean number of introduction available among ancestors"
 
+       # Mainmodule used to compute class hierarchy.
        var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
 
        redef fun collect(mclasses) do
                for mclass in mclasses do
@@ -150,8 +157,8 @@ class CNVI
        redef fun name do return "cnvi"
        redef fun desc do return "class novelty index, contribution of the class to its branch in term of introductions"
 
+       # Mainmodule used to compute class hierarchy.
        var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
 
        redef fun collect(mclasses) do
                var cbms = new CBMS(mainmodule)
@@ -179,8 +186,8 @@ class CNVS
        redef fun name do return "cnvs"
        redef fun desc do return "class novelty score, importance of the contribution of the class to its branch"
 
+       # Mainmodule used to compute class hierarchy.
        var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
 
        redef fun collect(mclasses) do
                var cnvi = new CNVI(mainmodule)
index c51e656..a7ded94 100644 (file)
@@ -57,12 +57,12 @@ redef class ToolContext
        var opt_generate_hyperdoc = new OptionBool("Generate Hyperdoc", "--generate_hyperdoc")
        # --poset
        var opt_poset = new OptionBool("Complete metrics on posets", "--poset")
-
        # --no-colors
        var opt_nocolors = new OptionBool("Disable colors in console outputs", "--no-colors")
-
-
+       # --dir
        var opt_dir = new OptionString("Directory where some statistics files are generated", "-d", "--dir")
+
+       # Output directory for metrics files.
        var output_dir: String = "."
 
        redef init
@@ -98,27 +98,41 @@ redef class ToolContext
                end
        end
 
-       # colorize heading 1 for console output
+       # Format and colorize a string heading of level 1 for console output.
+       #
+       # Default style is yellow and bold.
        fun format_h1(str: String): String do
                if opt_nocolors.value then return str
                return str.yellow.bold
        end
 
+       # Format and colorize a string heading of level 2 for console output.
+       #
+       # Default style is white and bold.
        fun format_h2(str: String): String do
                if opt_nocolors.value then return str
                return str.bold
        end
 
+       # Format and colorize a string heading of level 3 for console output.
+       #
+       # Default style is white and nobold.
        fun format_h3(str: String): String do
                if opt_nocolors.value then return str
                return str
        end
 
+       # Format and colorize a string heading of level 4 for console output.
+       #
+       # Default style is green.
        fun format_h4(str: String): String do
                if opt_nocolors.value then return str
                return str.green
        end
 
+       # Format and colorize a string heading of level 5 for console output.
+       #
+       # Default style is light gray.
        fun format_p(str: String): String do
                if opt_nocolors.value then return str
                return str.light_gray
@@ -144,11 +158,20 @@ end
 #
 # The concept is reified here for a better organization and documentation
 interface Metric
+
+       # Type of elements measured by this metric.
        type ELM: Object
+
+       # Type of values used to measure elements.
        type VAL: Object
+
+       # Type of data representation used to associate elements and values.
        type RES: Map[ELM, VAL]
 
+       # The name of this metric (generally an acronym about the metric).
        fun name: String is abstract
+
+       # A long and understandable description about what is measured by this metric.
        fun desc: String is abstract
 
        # Clear all results for this metric
@@ -197,6 +220,9 @@ interface Metric
                end
        end
 
+       # The sum of all the values.
+       fun sum: VAL is abstract
+
        # The values standard derivation
        fun std_dev: Float is abstract
 
@@ -211,6 +237,11 @@ interface Metric
 
        # The set of element above the threshold
        fun above_threshold: Set[ELM] is abstract
+
+       # Sort the metric keys by values
+       fun sort: Array[ELM] do
+               return values.keys_sorted_by_values(default_reverse_comparator)
+       end
 end
 
 # A Metric that collects integer data
@@ -222,12 +253,14 @@ class IntMetric
        redef type VAL: Int
        redef type RES: Counter[ELM]
 
+       # `IntMetric` uses a Counter to store values in intern.
        protected var values_cache = new Counter[ELM]
+
        redef fun values do return values_cache
 
        redef fun clear do values_cache.clear
 
-       fun sum: Int do return values_cache.sum
+       redef fun sum do return values_cache.sum
 
        redef fun max do
                assert not values_cache.is_empty
@@ -240,9 +273,9 @@ class IntMetric
        end
 
        # Values average
-       redef fun avg: Float do return values_cache.avg
+       redef fun avg do return values_cache.avg
 
-       redef fun std_dev: Float do return values_cache.std_dev
+       redef fun std_dev do return values_cache.std_dev
 
        redef fun above_threshold do
                var above = new HashSet[ELM]
@@ -271,12 +304,15 @@ class FloatMetric
 
        redef type VAL: Float
 
+       # `FloatMetric` uses a Map to store values in intern.
        protected var values_cache = new HashMap[ELM, VAL]
+
        redef fun values do return values_cache
 
        redef fun clear do values_cache.clear
 
-       fun sum: Float do
+
+       redef fun sum do
                var sum = 0.0
                for v in values.values do sum += v
                return sum
@@ -313,7 +349,7 @@ class FloatMetric
                return sum / values.length.to_f
        end
 
-       redef fun std_dev: Float do
+       redef fun std_dev do
                var sum = 0.0
                for value in values.values do
                        sum += (value - avg).pow(2.to_f)
@@ -338,13 +374,14 @@ class FloatMetric
                        print "{"\t" * indent}  sum: {sum}"
                end
        end
-
 end
 
 # A MetricSet is a metric holder
 #
 # It purpose is to be extended with a metric collect service
 class MetricSet
+
+       # Type of element measured by this `MetricSet`.
        type ELM: Object
 
        # Metrics to compute
index 4395cee..ff7bb48 100644 (file)
@@ -1717,6 +1717,15 @@ class MSignature
        # The each parameter (in order)
        var mparameters: Array[MParameter]
 
+       # Returns a parameter named `name`, if any.
+       fun mparameter_by_name(name: String): nullable MParameter
+       do
+               for p in mparameters do
+                       if p.name == name then return p
+               end
+               return null
+       end
+
        # The return type (null for a procedure)
        var return_mtype: nullable MType
 
index 23f7d49..27d6710 100644 (file)
@@ -91,6 +91,7 @@ redef class ModelBuilder
                model.mmodule_importation_hierarchy.sort(mmodules)
                var nmodules = new Array[AModule]
                for mm in mmodules do
+                       if mm.is_fictive then continue
                        nmodules.add(mmodule2node(mm).as(not null))
                end
                toolcontext.run_phases(nmodules)
index 3503bd0..5fd0381 100644 (file)
@@ -448,6 +448,14 @@ redef class ModelBuilder
 
        # Registration of the nclassdef associated to each mclassdef
        private var mclassdef2nclassdef = new HashMap[MClassDef, AClassdef]
+
+       # Retrieve the associated AST node of a mclassdef.
+       #
+       # This method is used to associate model entity with syntactic entities.
+       # If the class definition is not associated with a node, returns `null`.
+       fun mclassdef2node(mclassdef: MClassDef): nullable AClassdef do
+               return mclassdef2nclassdef.get_or_null(mclassdef)
+       end
 end
 
 redef class AModule
index 3243f96..66d5e9f 100644 (file)
@@ -182,7 +182,7 @@ redef class ModelBuilder
                var initializers = new Array[MProperty]
                for npropdef in nclassdef.n_propdefs do
                        if npropdef isa AMethPropdef then
-                               if npropdef.mpropdef == null then return # Skip broken attribute
+                               if npropdef.mpropdef == null then return # Skip broken method
                                var at = npropdef.get_single_annotation("autoinit", self)
                                if at == null then continue # Skip non tagged init
 
@@ -203,25 +203,26 @@ redef class ModelBuilder
                                npropdef.mpropdef.mproperty.is_autoinit = true
                        end
                        if npropdef isa AAttrPropdef then
-                               if npropdef.mpropdef == null then return # Skip broken attribute
+                               var mreadpropdef = npropdef.mreadpropdef
+                               if mreadpropdef == null or mreadpropdef.msignature == null then return # Skip broken attribute
                                if npropdef.noinit then continue # Skip noinit attribute
                                var atautoinit = npropdef.get_single_annotation("autoinit", self)
                                if atautoinit != null then
                                        # For autoinit attributes, call the reader to force
                                        # the lazy initialization of the attribute.
-                                       initializers.add(npropdef.mreadpropdef.mproperty)
-                                       npropdef.mreadpropdef.mproperty.is_autoinit = true
+                                       initializers.add(mreadpropdef.mproperty)
+                                       mreadpropdef.mproperty.is_autoinit = true
                                        continue
                                end
                                if npropdef.has_value then continue
-                               var paramname = npropdef.mpropdef.mproperty.name.substring_from(1)
-                               var ret_type = npropdef.mpropdef.static_mtype
+                               var paramname = mreadpropdef.mproperty.name
+                               var ret_type = mreadpropdef.msignature.return_mtype
                                if ret_type == null then return
                                var mparameter = new MParameter(paramname, ret_type, false, ret_type isa MNullableType)
                                mparameters.add(mparameter)
                                var msetter = npropdef.mwritepropdef
                                if msetter == null then
-                                       # No setter, it is a old-style attribute, so just add it
+                                       # No setter, it is a readonly attribute, so just add it
                                        initializers.add(npropdef.mpropdef.mproperty)
                                        npropdef.mpropdef.mproperty.is_autoinit = true
                                else
@@ -801,6 +802,8 @@ redef class AMethPropdef
                                name = "unary +"
                        else if name == "-" and arity == 0 then
                                name = "unary -"
+                       else if name == "~" and arity == 0 then
+                               name = "unary ~"
                        else
                                if amethodid.is_binary and arity != 1 then
                                        modelbuilder.error(self.n_signature, "Syntax Error: binary operator `{name}` requires exactly one parameter; got {arity}.")
index 333fa96..e0c343a 100644 (file)
@@ -41,6 +41,7 @@ private class Nitdoc
                        new StructurePhase(toolcontext, doc),
                        new InheritanceListsPhase(toolcontext, doc),
                        new IntroRedefListPhase(toolcontext, doc),
+                       new LinListPhase(toolcontext, doc),
                        new GraphPhase(toolcontext, doc),
                        new RenderHTMLPhase(toolcontext, doc): DocPhase]
 
index bf12e9d..18a0f1f 100644 (file)
@@ -23,6 +23,8 @@ import transform
 import rapid_type_analysis
 import compiler::separate_erasure_compiler
 
+import compiler::compiler_ffi::light_only
+
 redef class ToolContext
        redef fun process_options(args)
        do
index 5e3b7a6..a1f49a7 100644 (file)
@@ -32,6 +32,7 @@ redef class MMethod
                if nit_name == "-" then return "_minus"
                if nit_name == "unary -" then return "_unary_minus"
                if nit_name == "unary +" then return "_unary_plus"
+               if nit_name == "unary ~" then return "_unary_tilde"
                if nit_name == "*" then return "_star"
                if nit_name == "/" then return "_slash"
                if nit_name == "%" then return "_percent"
@@ -39,13 +40,17 @@ redef class MMethod
                if nit_name == "[]=" then return "_index_assign"
                if nit_name == "==" then return "_equal"
                if nit_name == "<" then return "_less"
-               if nit_name == ">" then return "_geater"
+               if nit_name == ">" then return "_greater"
                if nit_name == "<=" then return "_less_or_equal"
                if nit_name == ">=" then return "_greater_or_equal"
                if nit_name == "!=" then return "_not_equal"
                if nit_name == "<<" then return "_left"
                if nit_name == ">>" then return "_right"
                if nit_name == "<=>" then return "_starship"
+               if nit_name == "|" then return "_pipe"
+               if nit_name == "^" then return "_caret"
+               if nit_name == "&" then return "_amp"
+               if nit_name == "~" then return "_tilde"
 
                if nit_name.chars.last == '=' then return "{nit_name.substring(0, nit_name.length-1)}__assign"
                return nit_name
@@ -93,7 +98,7 @@ redef class MClassType
                        assert ctype != null
                        return ctype
                end
-               return mangled_cname
+               return cname_normal_class
        end
 
        redef fun cname_blind do
@@ -107,6 +112,9 @@ redef class MClassType
                return "struct nitni_instance *"
        end
 
+       # Name of this type in C for normal classes (not extern and not primitive)
+       protected fun cname_normal_class: String do return mangled_cname
+
        redef fun mangled_cname do return mclass.name
 
        redef fun is_cprimitive do return mclass.kind == extern_kind or
index d759992..17cc649 100644 (file)
@@ -32,6 +32,12 @@ redef class ToolContext
        var opt_meld = new OptionBool("Show diff between source and output using meld",
           "--meld")
 
+       # --line-width
+       var opt_line_width = new OptionInt("Maximum length of lines (use 0 to disable automatic line breaks)", 80, "--line-width")
+
+       # --no-inline
+       var opt_no_inline = new OptionBool("Disable automatic one-liners", "--no-inline")
+
        # Break too long string literals.
        var opt_break_str = new OptionBool("Break too long string literals", "--break-strings")
 
@@ -48,9 +54,9 @@ redef class ToolContext
 
        # Check formatting instead of pretty printing.
        #
-       # This option create a tempory pretty printed file then check if
-       # the output of the diff command on the source file and the pretty
-       # printed one is empty.
+       # This option creates a temporary pretty printed file then checks if the
+       # output of the diff command on the source file and the pretty printed one is
+       # empty.
        var opt_check = new OptionBool("Check format of Nit source files", "--check")
 end
 
@@ -69,7 +75,8 @@ var toolcontext = new ToolContext
 var opts = toolcontext.option_context
 opts.add_option(toolcontext.opt_dir, toolcontext.opt_output)
 opts.add_option(toolcontext.opt_diff, toolcontext.opt_meld, toolcontext.opt_check)
-opts.add_option(toolcontext.opt_break_str, toolcontext.opt_inline_do)
+opts.add_option(toolcontext.opt_line_width, toolcontext.opt_break_str, toolcontext.opt_inline_do)
+opts.add_option(toolcontext.opt_no_inline)
 opts.add_option(toolcontext.opt_skip_empty)
 
 toolcontext.tooldescription = "Usage: nitpretty [OPTION]... <file.nit>\n" +
@@ -80,7 +87,7 @@ var arguments = toolcontext.option_context.rest
 # build model
 var model = new Model
 var mbuilder = new ModelBuilder(model, toolcontext)
-var mmodules = mbuilder.parse(arguments)
+var mmodules = mbuilder.parse_full(arguments)
 mbuilder.run_phases
 
 if mmodules.is_empty then
@@ -97,6 +104,7 @@ var dir = toolcontext.opt_dir.value or else ".nitpretty"
 if not dir.file_exists then dir.mkdir
 var v = new PrettyPrinterVisitor
 
+v.max_size = toolcontext.opt_line_width.value
 if toolcontext.opt_break_str.value then
        v.break_strings = true
 end
@@ -106,6 +114,9 @@ end
 if toolcontext.opt_skip_empty.value then
        v.skip_empty = true
 end
+if toolcontext.opt_no_inline.value then
+       v.no_inline = true
+end
 
 for mmodule in mmodules do
        var nmodule = mbuilder.mmodule2node(mmodule)
index 610823a..43a1600 100644 (file)
@@ -798,7 +798,7 @@ redef class TStarstareq
     end
 end
 
-redef class TLleq
+redef class TPipeeq
     redef fun parser_index: Int
     do
        return 66
@@ -810,7 +810,7 @@ redef class TLleq
     end
 end
 
-redef class TGgeq
+redef class TCareteq
     redef fun parser_index: Int
     do
        return 67
@@ -822,7 +822,7 @@ redef class TGgeq
     end
 end
 
-redef class TDotdotdot
+redef class TAmpeq
     redef fun parser_index: Int
     do
        return 68
@@ -834,7 +834,7 @@ redef class TDotdotdot
     end
 end
 
-redef class TDotdot
+redef class TLleq
     redef fun parser_index: Int
     do
        return 69
@@ -846,7 +846,7 @@ redef class TDotdot
     end
 end
 
-redef class TDot
+redef class TGgeq
     redef fun parser_index: Int
     do
        return 70
@@ -858,7 +858,7 @@ redef class TDot
     end
 end
 
-redef class TPlus
+redef class TDotdotdot
     redef fun parser_index: Int
     do
        return 71
@@ -870,7 +870,7 @@ redef class TPlus
     end
 end
 
-redef class TMinus
+redef class TDotdot
     redef fun parser_index: Int
     do
        return 72
@@ -882,7 +882,7 @@ redef class TMinus
     end
 end
 
-redef class TStar
+redef class TDot
     redef fun parser_index: Int
     do
        return 73
@@ -894,7 +894,7 @@ redef class TStar
     end
 end
 
-redef class TStarstar
+redef class TPlus
     redef fun parser_index: Int
     do
        return 74
@@ -906,7 +906,7 @@ redef class TStarstar
     end
 end
 
-redef class TSlash
+redef class TMinus
     redef fun parser_index: Int
     do
        return 75
@@ -918,7 +918,7 @@ redef class TSlash
     end
 end
 
-redef class TPercent
+redef class TStar
     redef fun parser_index: Int
     do
        return 76
@@ -930,7 +930,7 @@ redef class TPercent
     end
 end
 
-redef class TEq
+redef class TStarstar
     redef fun parser_index: Int
     do
        return 77
@@ -942,7 +942,7 @@ redef class TEq
     end
 end
 
-redef class TNe
+redef class TSlash
     redef fun parser_index: Int
     do
        return 78
@@ -954,7 +954,7 @@ redef class TNe
     end
 end
 
-redef class TLt
+redef class TPercent
     redef fun parser_index: Int
     do
        return 79
@@ -966,7 +966,7 @@ redef class TLt
     end
 end
 
-redef class TLe
+redef class TPipe
     redef fun parser_index: Int
     do
        return 80
@@ -978,7 +978,7 @@ redef class TLe
     end
 end
 
-redef class TLl
+redef class TCaret
     redef fun parser_index: Int
     do
        return 81
@@ -990,7 +990,7 @@ redef class TLl
     end
 end
 
-redef class TGt
+redef class TAmp
     redef fun parser_index: Int
     do
        return 82
@@ -1002,7 +1002,7 @@ redef class TGt
     end
 end
 
-redef class TGe
+redef class TTilde
     redef fun parser_index: Int
     do
        return 83
@@ -1014,7 +1014,7 @@ redef class TGe
     end
 end
 
-redef class TGg
+redef class TEq
     redef fun parser_index: Int
     do
        return 84
@@ -1026,7 +1026,7 @@ redef class TGg
     end
 end
 
-redef class TStarship
+redef class TNe
     redef fun parser_index: Int
     do
        return 85
@@ -1038,7 +1038,7 @@ redef class TStarship
     end
 end
 
-redef class TBang
+redef class TLt
     redef fun parser_index: Int
     do
        return 86
@@ -1050,7 +1050,7 @@ redef class TBang
     end
 end
 
-redef class TAt
+redef class TLe
     redef fun parser_index: Int
     do
        return 87
@@ -1062,7 +1062,7 @@ redef class TAt
     end
 end
 
-redef class TClassid
+redef class TLl
     redef fun parser_index: Int
     do
        return 88
@@ -1074,7 +1074,7 @@ redef class TClassid
     end
 end
 
-redef class TId
+redef class TGt
     redef fun parser_index: Int
     do
        return 89
@@ -1086,7 +1086,7 @@ redef class TId
     end
 end
 
-redef class TAttrid
+redef class TGe
     redef fun parser_index: Int
     do
        return 90
@@ -1098,7 +1098,7 @@ redef class TAttrid
     end
 end
 
-redef class TNumber
+redef class TGg
     redef fun parser_index: Int
     do
        return 91
@@ -1110,7 +1110,7 @@ redef class TNumber
     end
 end
 
-redef class THexNumber
+redef class TStarship
     redef fun parser_index: Int
     do
        return 92
@@ -1122,7 +1122,7 @@ redef class THexNumber
     end
 end
 
-redef class TFloat
+redef class TBang
     redef fun parser_index: Int
     do
        return 93
@@ -1134,7 +1134,7 @@ redef class TFloat
     end
 end
 
-redef class TString
+redef class TAt
     redef fun parser_index: Int
     do
        return 94
@@ -1146,7 +1146,7 @@ redef class TString
     end
 end
 
-redef class TStartString
+redef class TSemi
     redef fun parser_index: Int
     do
        return 95
@@ -1158,7 +1158,7 @@ redef class TStartString
     end
 end
 
-redef class TMidString
+redef class TClassid
     redef fun parser_index: Int
     do
        return 96
@@ -1170,7 +1170,7 @@ redef class TMidString
     end
 end
 
-redef class TEndString
+redef class TId
     redef fun parser_index: Int
     do
        return 97
@@ -1182,7 +1182,7 @@ redef class TEndString
     end
 end
 
-redef class TChar
+redef class TAttrid
     redef fun parser_index: Int
     do
        return 98
@@ -1194,7 +1194,7 @@ redef class TChar
     end
 end
 
-redef class TBadString
+redef class TNumber
     redef fun parser_index: Int
     do
        return 99
@@ -1206,7 +1206,7 @@ redef class TBadString
     end
 end
 
-redef class TBadChar
+redef class THexNumber
     redef fun parser_index: Int
     do
        return 100
@@ -1218,7 +1218,7 @@ redef class TBadChar
     end
 end
 
-redef class TExternCodeSegment
+redef class TFloat
     redef fun parser_index: Int
     do
        return 101
@@ -1230,11 +1230,107 @@ redef class TExternCodeSegment
     end
 end
 
+redef class TString
+    redef fun parser_index: Int
+    do
+       return 102
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TStartString
+    redef fun parser_index: Int
+    do
+       return 103
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TMidString
+    redef fun parser_index: Int
+    do
+       return 104
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TEndString
+    redef fun parser_index: Int
+    do
+       return 105
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TChar
+    redef fun parser_index: Int
+    do
+       return 106
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TBadString
+    redef fun parser_index: Int
+    do
+       return 107
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TBadChar
+    redef fun parser_index: Int
+    do
+       return 108
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TExternCodeSegment
+    redef fun parser_index: Int
+    do
+       return 109
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
 
 redef class EOF
     redef fun parser_index: Int
     do
-       return 102
+       return 110
     end
 end
 
@@ -1440,111 +1536,135 @@ redef class Lexer
                        return new TStarstareq.init_tk(location)
                end
                if accept_token == 67 then
-                       return new TLleq.init_tk(location)
+                       return new TPipeeq.init_tk(location)
                end
                if accept_token == 68 then
-                       return new TGgeq.init_tk(location)
+                       return new TCareteq.init_tk(location)
                end
                if accept_token == 69 then
-                       return new TDotdotdot.init_tk(location)
+                       return new TAmpeq.init_tk(location)
                end
                if accept_token == 70 then
-                       return new TDotdot.init_tk(location)
+                       return new TLleq.init_tk(location)
                end
                if accept_token == 71 then
-                       return new TDot.init_tk(location)
+                       return new TGgeq.init_tk(location)
                end
                if accept_token == 72 then
-                       return new TPlus.init_tk(location)
+                       return new TDotdotdot.init_tk(location)
                end
                if accept_token == 73 then
-                       return new TMinus.init_tk(location)
+                       return new TDotdot.init_tk(location)
                end
                if accept_token == 74 then
-                       return new TStar.init_tk(location)
+                       return new TDot.init_tk(location)
                end
                if accept_token == 75 then
-                       return new TStarstar.init_tk(location)
+                       return new TPlus.init_tk(location)
                end
                if accept_token == 76 then
-                       return new TSlash.init_tk(location)
+                       return new TMinus.init_tk(location)
                end
                if accept_token == 77 then
-                       return new TPercent.init_tk(location)
+                       return new TStar.init_tk(location)
                end
                if accept_token == 78 then
-                       return new TEq.init_tk(location)
+                       return new TStarstar.init_tk(location)
                end
                if accept_token == 79 then
-                       return new TNe.init_tk(location)
+                       return new TSlash.init_tk(location)
                end
                if accept_token == 80 then
-                       return new TLt.init_tk(location)
+                       return new TPercent.init_tk(location)
                end
                if accept_token == 81 then
-                       return new TLe.init_tk(location)
+                       return new TPipe.init_tk(location)
                end
                if accept_token == 82 then
-                       return new TLl.init_tk(location)
+                       return new TCaret.init_tk(location)
                end
                if accept_token == 83 then
-                       return new TGt.init_tk(location)
+                       return new TAmp.init_tk(location)
                end
                if accept_token == 84 then
-                       return new TGe.init_tk(location)
+                       return new TTilde.init_tk(location)
                end
                if accept_token == 85 then
-                       return new TGg.init_tk(location)
+                       return new TEq.init_tk(location)
                end
                if accept_token == 86 then
-                       return new TStarship.init_tk(location)
+                       return new TNe.init_tk(location)
                end
                if accept_token == 87 then
-                       return new TBang.init_tk(location)
+                       return new TLt.init_tk(location)
                end
                if accept_token == 88 then
-                       return new TAt.init_tk(location)
+                       return new TLe.init_tk(location)
                end
                if accept_token == 89 then
-                       return new TClassid.init_tk(location)
+                       return new TLl.init_tk(location)
                end
                if accept_token == 90 then
-                       return new TId.init_tk(location)
+                       return new TGt.init_tk(location)
                end
                if accept_token == 91 then
-                       return new TAttrid.init_tk(location)
+                       return new TGe.init_tk(location)
                end
                if accept_token == 92 then
-                       return new TNumber.init_tk(location)
+                       return new TGg.init_tk(location)
                end
                if accept_token == 93 then
-                       return new THexNumber.init_tk(location)
+                       return new TStarship.init_tk(location)
                end
                if accept_token == 94 then
-                       return new TFloat.init_tk(location)
+                       return new TBang.init_tk(location)
                end
                if accept_token == 95 then
-                       return new TString.init_tk(location)
+                       return new TAt.init_tk(location)
                end
                if accept_token == 96 then
-                       return new TStartString.init_tk(location)
+                       return new TSemi.init_tk(location)
                end
                if accept_token == 97 then
-                       return new TMidString.init_tk(location)
+                       return new TClassid.init_tk(location)
                end
                if accept_token == 98 then
-                       return new TEndString.init_tk(location)
+                       return new TId.init_tk(location)
                end
                if accept_token == 99 then
-                       return new TChar.init_tk(location)
+                       return new TAttrid.init_tk(location)
                end
                if accept_token == 100 then
-                       return new TBadString.init_tk(location)
+                       return new TNumber.init_tk(location)
                end
                if accept_token == 101 then
-                       return new TBadChar.init_tk(location)
+                       return new THexNumber.init_tk(location)
                end
                if accept_token == 102 then
+                       return new TFloat.init_tk(location)
+               end
+               if accept_token == 103 then
+                       return new TString.init_tk(location)
+               end
+               if accept_token == 104 then
+                       return new TStartString.init_tk(location)
+               end
+               if accept_token == 105 then
+                       return new TMidString.init_tk(location)
+               end
+               if accept_token == 106 then
+                       return new TEndString.init_tk(location)
+               end
+               if accept_token == 107 then
+                       return new TChar.init_tk(location)
+               end
+               if accept_token == 108 then
+                       return new TBadString.init_tk(location)
+               end
+               if accept_token == 109 then
+                       return new TBadChar.init_tk(location)
+               end
+               if accept_token == 110 then
                        return new TExternCodeSegment.init_tk(location)
                end
                abort # unknown token index `accept_token`
index 5ca0e37..eb80d5f 100644 (file)
@@ -162,6 +162,9 @@ stareq = '*=';
 slasheq = '/=';
 percenteq = '%=';
 starstareq = '**=';
+pipeeq = '|=';
+careteq = '^=';
+ampeq = '&=';
 lleq = '<<=';
 ggeq = '>>=';
 dotdotdot = '...';
@@ -173,6 +176,10 @@ star = '*';
 starstar = '**';
 slash = '/';
 percent = '%';
+pipe = '|';
+caret = '^';
+amp = '&';
+tilde = '~';
 eq = '==';
 ne = '!=';
 lt = '<';
@@ -184,6 +191,7 @@ gg = '>>';
 starship = '<=>';
 bang='!';
 at='@';
+semi=';';
 
 classid = uppercase letter*;
 id = lowercase letter*;
@@ -217,11 +225,11 @@ module
        = moduledecl? [imports]:import* [extern_bodies]:extern_code_body* [classdefs]:topdef* implicit_main_class {-> New module(moduledecl, [imports.import], [extern_bodies.extern_code_block], [classdefs.classdef,implicit_main_class.classdef])};
 
 moduledecl
-       = [doc]:no redef visibility kwmodule no module_name annotation_withend [n2]:n1 {-> New moduledecl(doc.doc, redef.kwredef, visibility, kwmodule, module_name, annotation_withend.annotations)};
+       = [doc]:nd redef visibility kwmodule no module_name annotation_withend [n2]:n1 {-> New moduledecl(doc.doc, redef.kwredef, visibility, kwmodule, module_name, annotation_withend.annotations)};
 
 import
-       = {std} [doc]:no redef visibility kwimport no module_name annotation_withend [n2]:n1 {-> New import.std(visibility, kwimport, module_name, annotation_withend.annotations)}
-       | {no} [doc]:no redef visibility kwimport no kwend [n2]:n1 {-> New import.no(visibility, kwimport, kwend)}
+       = {std} [doc]:nd redef visibility kwimport no module_name annotation_withend [n2]:n1 {-> New import.std(visibility, kwimport, module_name, annotation_withend.annotations)}
+       | {no} [doc]:nd redef visibility kwimport no kwend [n2]:n1 {-> New import.no(visibility, kwimport, kwend)}
        ;
 
 topdef {-> classdef}
@@ -234,13 +242,16 @@ implicit_main_class {-> classdef?}
        | {null} n? {-> Null}
        ;
 implicit_main_meth {-> propdef}
-       = [doc]:no stmts {-> New propdef.main_meth(Null, stmts.expr)}
-       | {n} [doc]:no stmtsn {-> New propdef.main_meth(Null, stmtsn.expr)}
+       = [doc]:nd stmts {-> New propdef.main_meth(Null, stmts.expr)}
+       | {n} [doc]:nd stmtsn {-> New propdef.main_meth(Null, stmtsn.expr)}
        ;
 
 /* CLASSES *******************************************************************/
 classdef
-       = [doc]:no redef visibility classkind no qclassid formaldefs extern_code_block? propdefs kwend {-> New classdef.std(doc.doc, redef.kwredef, visibility, classkind, qclassid.classid, [formaldefs.formaldef], extern_code_block, [propdefs.propdef], kwend)};
+       = [doc]:nd redef visibility classkind no qclassid extern_code_block? propdefs kwend {-> New classdef.std(doc.doc, redef.kwredef, visibility, classkind, qclassid.classid, Null, [], Null, extern_code_block, [propdefs.propdef], kwend)}
+       | {for} [doc]:nd redef visibility classkind no qclassid obra [n2]:no formaldefs cbra extern_code_block? propdefs kwend {-> New classdef.std(doc.doc, redef.kwredef, visibility, classkind, qclassid.classid, obra, [formaldefs.formaldef], cbra, extern_code_block, [propdefs.propdef], kwend)}
+       ;
+
 redef {-> kwredef?}
        = kwredef? {-> kwredef};
 classkind
@@ -252,49 +263,49 @@ classkind
        ;
 
 formaldefs {-> formaldef*}
-       = obra no formaldef formaldefs_tail* [n2]:no cbra {-> [formaldef, formaldefs_tail.formaldef]}
-       | {null} {-> []}
+       = formaldef formaldefs_tail* {-> [formaldef, formaldefs_tail.formaldef]}
+       | {empty} {->[]}
        ;
 formaldefs_tail {-> formaldef}
        = comma no formaldef {-> formaldef};
 formaldef
-       = classid annotations? typing_o {-> New formaldef(classid, typing_o.type, annotations)};
+       = classid annotations? typing_o no {-> New formaldef(classid, typing_o.type, annotations)};
 
 superclass {-> propdef}
-       = {super} [doc]:no redef visibility kwsuper [n2]:no type annotation_withend {-> New propdef.super(doc.doc, redef.kwredef, visibility, kwsuper, type, annotation_withend.annotations)}
+       = {super} [doc]:nd redef visibility kwsuper [n2]:no type annotation_withend {-> New propdef.super(doc.doc, redef.kwredef, visibility, kwsuper, type, annotation_withend.annotations)}
        ;
 
 propdefs {-> propdef*}
        = propdefn+ no {-> [propdefn.propdef]}
        | {super} superclass {-> [superclass.propdef]}
-       | {empty} no {-> []}
+       | {empty} nd {-> []}
        ;
 propdefn {-> propdef}
        = propdef n1 {-> propdef.propdef}
        ;
 propdef~toplevel {-> propdef}
-       = {meth} [doc]:no redef visibility kwmeth qmethid signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
-       | {nobody} [doc]:no redef visibility kwmeth qmethid signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_withend_nonull.annotations, Null, Null, Null)}
-!toplevel| {intern_new} [doc]:no redef visibility kwnew qmethid? signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_withend_nonull.annotations, Null, Null, Null)}
-!toplevel| {new} [doc]:no redef visibility kwnew qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
-       | {extern_implicit} [doc]:no redef visibility kwmeth qmethid signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_noend.annotations, extern_calls, extern_code_block, Null)}
-!toplevel| {var3} [doc]:no redef visibility kwvar id typing_o annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, annotation_withend.annotations, Null)}
-!toplevel| {var4} [doc]:no redef visibility kwvar id typing_o assign [n2]:no expr annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, expr.expr, annotation_withend.annotations, Null)}
-!toplevel| {var5} [doc]:no redef visibility kwvar id typing_o annotation_noend? kwdo stmtso kwend? {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, annotation_noend.annotations, stmtso.expr)}
-!toplevel| {init} [doc]:no redef visibility kwinit qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, kwinit, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
-!toplevel| {type} [doc]:no redef visibility kwtype classid typing annotation_withend {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type, annotation_withend.annotations)}
-!toplevel| {extern_init_implicit} [doc]:no redef visibility kwnew qmethid? signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, extern_calls, extern_code_block, Null)}
+       = {meth} [doc]:nd redef visibility kwmeth qmethid signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, kwdo, stmtso.expr, kwend_o.kwend)}
+       | {nobody} [doc]:nd redef visibility kwmeth qmethid signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_withend_nonull.annotations, Null, Null, Null, Null, Null)}
+!toplevel| {intern_new} [doc]:nd redef visibility kwnew qmethid? signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_withend_nonull.annotations, Null, Null, Null, Null, Null)}
+!toplevel| {new} [doc]:nd redef visibility kwnew qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, Null, Null, kwdo, stmtso.expr, kwend_o.kwend)}
+       | {extern_implicit} [doc]:nd redef visibility kwmeth qmethid signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_noend.annotations, extern_calls, extern_code_block, Null, Null, Null)}
+!toplevel| {var3} [doc]:nd redef visibility kwvar id typing_o annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, Null, annotation_withend.annotations, Null, Null, Null)}
+!toplevel| {var4} [doc]:nd redef visibility kwvar id typing_o assign [n2]:no expr annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, assign, expr.expr, annotation_withend.annotations, Null, Null, Null)}
+!toplevel| {var5} [doc]:nd redef visibility kwvar id typing_o annotation_noend? kwdo stmtso kwend? {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, Null, annotation_noend.annotations, kwdo, stmtso.expr, kwend)}
+!toplevel| {init} [doc]:nd redef visibility kwinit qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, kwinit, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, kwdo, stmtso.expr, kwend_o.kwend)}
+!toplevel| {type} [doc]:nd redef visibility kwtype classid typing annotation_withend {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type, annotation_withend.annotations)}
+!toplevel| {extern_init_implicit} [doc]:nd redef visibility kwnew qmethid? signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, extern_calls, extern_code_block, Null, Null, Null)}
 !toplevel| {annot} line_annotation_forclass {-> line_annotation_forclass.propdef}
 !toplevel| {super} superclass {-> superclass.propdef}
        ;
 annotation_withend~nonull {-> annotations?}
-       = {oneliner} kwis many_annotations {-> many_annotations.annotations}
-       | {more} kwis n1 line_annotations kwend {-> line_annotations.annotations}
+       = {oneliner} kwis annotation_list {-> New annotations(kwis, Null, Null, [annotation_list.annotation], Null, Null)}
+       | {more} kwis n1 line_annotation+ kwend {-> New annotations(kwis, Null, Null, [line_annotation.annotation], Null, kwend) }
 !nonull        | {null} {-> Null}
        ;
 annotation_noend {-> annotations}
-       = {oneliner} kwis many_annotations {-> many_annotations.annotations}
-       | {more} kwis n1 line_annotations {-> line_annotations.annotations}
+       = {oneliner} kwis annotation_list {-> New annotations(kwis, Null, Null, [annotation_list.annotation], Null, Null)}
+       | {more} kwis n1 line_annotation+ {-> New annotations(kwis, Null, Null, [line_annotation.annotation], Null, Null) }
        ;
 
 visibility
@@ -312,6 +323,10 @@ methid~noid {-> methid}
        | {starstar} starstar {-> New methid.starstar(starstar)}
        | {slash} slash {-> New methid.slash(slash)}
        | {percent} percent {-> New methid.percent(percent)}
+       | {pipe} pipe {-> New methid.pipe(pipe)}
+       | {caret} caret {-> New methid.caret(caret)}
+       | {amp} amp {-> New methid.amp(amp)}
+       | {tilde} tilde {-> New methid.tilde(tilde)}
        | {eq} eq {-> New methid.eq(eq)}
        | {ne} ne {-> New methid.ne(ne)}
        | {le} le {-> New methid.le(le)}
@@ -382,8 +397,8 @@ extern_code_body {-> extern_code_block} = no extern_code_block {-> extern_code_b
 
 /* TYPES *********************************************************************/
 type~nobra~nopar {-> type}
-       = {simple} kwnullable? classid annotations_o~nopar {-> New type(kwnullable, classid, [], annotations_o~nopar.annotations)}
-!nobra | {generic} kwnullable? classid obra no types [n2]:no cbra annotations_o~nopar {-> New type(kwnullable, classid, [types.type], annotations_o~nopar.annotations)}
+       = {simple} kwnullable? classid annotations_o~nopar {-> New type(kwnullable, classid, Null, [], Null, annotations_o~nopar.annotations)}
+!nobra | {generic} kwnullable? classid obra no types [n2]:no cbra annotations_o~nopar {-> New type(kwnullable, classid, obra, [types.type], cbra, annotations_o~nopar.annotations)}
        ;
 types {-> type*} 
        = type types_tail* {-> [type, types_tail.type]};
@@ -453,6 +468,9 @@ assign_op
        | {slash} slasheq
        | {percent} percenteq
        | {starstar} starstareq
+       | {pipe} pipeeq
+       | {caret} careteq
+       | {amp} ampeq
        | {ll} lleq
        | {gg} ggeq
        ;
@@ -463,14 +481,15 @@ do~withelse {-> expr}
        ;
 
 if~withelse {-> expr}
-       = {onelineelse} kwif no expr [n2]:no kwthen stmt_withelse kwelse stmtso~withelse {-> New expr.if(kwif, expr, stmt_withelse.expr, stmtso~withelse.expr)}
-!withelse      | {oneline} kwif no expr [n2]:no kwthen stmt {-> New expr.if(kwif, expr, stmt.expr, Null)}
-!withelse      | {block} kwif no expr [n2]:no kwthen [n3]:n stmtsn elsepartblock {-> New expr.if(kwif, expr, stmtsn.expr, elsepartblock.expr)}
-!withelse      | {emptyblock} kwif no expr [n2]:no kwthen [n3]:n? elsepartblock {-> New expr.if(kwif, expr, Null, elsepartblock.expr)}
+       = {onelineelse} kwif no expr [n2]:no kwthen stmt_withelse kwelse stmtso~withelse {-> New expr.if(kwif, expr, kwthen, stmt_withelse.expr, kwelse, stmtso~withelse.expr)}
+!withelse      | {oneline} kwif no expr [n2]:no kwthen stmt {-> New expr.if(kwif, expr, kwthen, stmt.expr, Null, Null)}
+!withelse      | {block} kwif no expr [n2]:no kwthen [n3]:n stmtsn kwelse stmtso {-> New expr.if(kwif, expr, kwthen, stmtsn.expr, kwelse, stmtso.expr)}
+!withelse      | {emptyblock} kwif no expr [n2]:no kwthen [n3]:n? kwelse stmtso {-> New expr.if(kwif, expr, kwthen, Null, kwelse, stmtso.expr)}
+!withelse      | {blocknoelse} kwif no expr [n2]:no kwthen [n3]:n stmtsn endblock {-> New expr.if(kwif, expr, kwthen, stmtsn.expr, Null, endblock.expr)}
+!withelse      | {emptyblocknoelse} kwif no expr [n2]:no kwthen [n3]:n? endblock {-> New expr.if(kwif, expr, kwthen, Null, Null, endblock.expr)}
        ;
-elsepartblock {-> expr?}
-       = {else} kwelse stmtso {-> stmtso.expr}
-       | {empty} kwend {-> New expr.block([], kwend)}
+endblock {-> expr}
+       = {empty} kwend {-> New expr.block([], kwend)}
        ;
 
 loop~withelse {-> expr}
@@ -484,8 +503,8 @@ while~withelse {-> expr}
        ;
 
 for~withelse {-> expr}
-       = kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso_withend label {-> New expr.for(kwfor, [ids.id], expr, kwdo, stmtso_withend.expr, label)}
-       | {nolabel} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso~withelse {-> New expr.for(kwfor, [ids.id], expr, kwdo, stmtso~withelse.expr, Null)}
+       = kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso_withend label {-> New expr.for(kwfor, [ids.id], kwin, expr, kwdo, stmtso_withend.expr, label)}
+       | {nolabel} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso~withelse {-> New expr.for(kwfor, [ids.id], kwin, expr, kwdo, stmtso~withelse.expr, Null)}
        ;
 
 with~withelse {-> expr}
@@ -499,8 +518,8 @@ withexpr {-> expr}
        ;
 
 assert~withelse {-> expr}
-       = {else} kwassert assertid? expr kwelse stmtso~withelse {-> New expr.assert(kwassert, assertid.id, expr, stmtso~withelse.expr)}
-!withelse| {noelse} kwassert assertid? expr {-> New expr.assert(kwassert, assertid.id, expr, Null)}
+       = {else} kwassert assertid? expr kwelse stmtso~withelse {-> New expr.assert(kwassert, assertid.id, expr, kwelse, stmtso~withelse.expr)}
+!withelse| {noelse} kwassert assertid? expr {-> New expr.assert(kwassert, assertid.id, expr, Null, Null)}
        ;
 assertid {-> id}
        = id column {-> id};
@@ -525,17 +544,36 @@ expr_not~nopar~nobra {-> expr}
        ;
 
 expr_eq~nopar~nobra {-> expr}
-       = expr_add~nopar~nobra {-> expr_add~nopar~nobra.expr}
-       | {:eq} expr_add~nopar~nobra eq :no [expr2]:expr_add~nopar~nobra
-       | {:ne} expr_add~nopar~nobra ne :no [expr2]:expr_add~nopar~nobra
-       | {:lt} expr_add~nopar~nobra lt :no [expr2]:expr_add~nopar~nobra
-       | {:le} expr_add~nopar~nobra le :no [expr2]:expr_add~nopar~nobra
-       | {:ll} expr_eq~nopar~nobra ll :no [expr2]:expr_add~nopar~nobra
-       | {:gt} expr_add~nopar~nobra gt :no [expr2]:expr_add~nopar~nobra
-       | {:ge} expr_add~nopar~nobra ge :no [expr2]:expr_add~nopar~nobra
-       | {:gg} expr_eq~nopar~nobra gg :no [expr2]:expr_add~nopar~nobra
-       | {:starship} expr_add~nopar~nobra starship :no [expr2]:expr_add~nopar~nobra
-       | {:isa} expr_add~nopar~nobra kwisa :no type~nobra
+       = expr_bitor~nopar~nobra {-> expr_bitor~nopar~nobra.expr}
+       | {:eq} expr_bitor~nopar~nobra eq :no [expr2]:expr_bitor~nopar~nobra
+       | {:ne} expr_bitor~nopar~nobra ne :no [expr2]:expr_bitor~nopar~nobra
+       | {:lt} expr_bitor~nopar~nobra lt :no [expr2]:expr_bitor~nopar~nobra
+       | {:le} expr_bitor~nopar~nobra le :no [expr2]:expr_bitor~nopar~nobra
+       | {:gt} expr_bitor~nopar~nobra gt :no [expr2]:expr_bitor~nopar~nobra
+       | {:ge} expr_bitor~nopar~nobra ge :no [expr2]:expr_bitor~nopar~nobra
+       | {:starship} expr_bitor~nopar~nobra starship :no [expr2]:expr_bitor~nopar~nobra
+       | {:isa} expr_bitor~nopar~nobra kwisa :no type~nobra
+       ;
+
+expr_bitor~nopar~nobra {-> expr}
+       = [expr]:expr_bitxor~nopar~nobra {-> expr.expr}
+       | {:pipe} expr_bitor~nopar~nobra pipe :no [expr2]:expr_bitxor~nopar~nobra
+       ;
+
+expr_bitxor~nopar~nobra {-> expr}
+       = [expr]:expr_bitand~nopar~nobra {-> expr.expr}
+       | {:caret} expr_bitxor~nopar~nobra caret :no [expr2]:expr_bitand~nopar~nobra
+       ;
+
+expr_bitand~nopar~nobra {-> expr}
+       = [expr]:expr_shift~nopar~nobra {-> expr.expr}
+       | {:amp} expr_bitand~nopar~nobra amp :no [expr2]:expr_shift~nopar~nobra
+       ;
+
+expr_shift~nopar~nobra {-> expr}
+       = [expr]:expr_add~nopar~nobra {-> expr.expr}
+       | {:ll} expr_shift~nopar~nobra ll :no [expr2]:expr_add~nopar~nobra
+       | {:gg} expr_shift~nopar~nobra gg :no [expr2]:expr_add~nopar~nobra
        ;
 
 expr_add~nopar~nobra {-> expr}
@@ -560,6 +598,7 @@ expr_minus~nopar~nobra {-> expr}
        = expr_new~nopar~nobra {-> expr_new~nopar~nobra.expr}
        | {:uminus} minus expr_minus~nobra
        | {:uplus} plus expr_minus~nobra
+       | {:utilde} tilde expr_minus~nobra
        | {:once} kwonce :no expr_minus~nobra
        ;
 
@@ -580,7 +619,12 @@ expr_atom~nopar~nobra {-> expr}
         | {as_cast} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no type [n4]:no cpar {-> New expr.as_cast(expr_atom~nopar~nobra.expr, kwas, opar, type, cpar)}
         | {as_notnull} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no kwnot [n4]:no kwnull [n5]:no cpar {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, opar, kwnot, kwnull, cpar)}
         | {as_notnull2}expr_atom~nopar~nobra dot no kwas [n2]:no kwnot [n4]:no kwnull {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, Null, kwnot, kwnull, Null)}
-       | {vararg} [expr]:expr_atom~nopar~nobra dotdotdot {-> New expr.vararg(expr.expr, dotdotdot)}
+       ;
+
+arg~nopar~nobra {-> expr}
+       = [expr]:expr~nopar~nobra {-> expr.expr}
+       | {vararg} [expr]:expr~nopar~nobra dotdotdot {-> New expr.vararg(expr.expr, dotdotdot)}
+       | {namedarg} id assign [expr]:expr~nopar~nobra  {-> New expr.namedarg(id, assign, expr.expr) }
        ;
 
 expr_single~nopar~nobra {-> expr}
@@ -596,8 +640,8 @@ expr_single~nopar~nobra {-> expr}
        | {superstring} superstring  {-> superstring.expr}
 !nopar | {par} expr_par {-> expr_par.expr}
 // !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
-!nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
-!nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
+!nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, dotdot, expr2.expr, cbra, annotations_o.annotations)}
+!nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, dotdot, expr2.expr, cbra, annotations_o.annotations)}
 !nobra!nopar   | {array} obra no array_items typing_o cbra annotations_o {-> New expr.array(obra, [array_items.expr], typing_o.type, cbra, annotations_o.annotations)}
        ;
 
@@ -622,8 +666,8 @@ array_items_tail {-> expr}
        ;
 array_item {-> expr}
        = expr no {-> expr}
-       | {for} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo [block]:array_item {-> New expr.for(kwfor, [ids.id], expr, kwdo, block.expr, Null)}
-       | {if} kwif [n1]:no expr [n2]:no kwthen [n3]:no [then]:array_item {-> New expr.if(kwif, expr, then.expr, Null)}
+       | {for} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo [block]:array_item {-> New expr.for(kwfor, [ids.id], kwin, expr, kwdo, block.expr, Null)}
+       | {if} kwif [n1]:no expr [n2]:no kwthen [n3]:no [then]:array_item {-> New expr.if(kwif, expr, kwthen, then.expr, Null, Null)}
        ;
 
 superstring {-> expr} 
@@ -646,8 +690,8 @@ superstring_end {-> expr}
 /* ANNOTATIONS *******************************************************************/
 
 annotations~nopar {-> annotations}
-       = {one} at one_annotation~nopar {-> New annotations(at, Null, [one_annotation~nopar.annotation], Null)}
-       | {many} at opar no annotation_list [n2]:no cpar {-> New annotations(at, opar, [annotation_list.annotation], cpar)}
+       = {one} at one_annotation~nopar {-> New annotations(Null, at, Null, [one_annotation~nopar.annotation], Null, Null)}
+       | {many} at opar no annotation_list [n2]:no cpar {-> New annotations(Null, at, opar, [annotation_list.annotation], cpar, Null)}
        ;
 annotations_o~nopar {-> annotations?}
        = annotations~nopar {-> annotations~nopar.annotations}
@@ -660,10 +704,6 @@ one_annotation~nopar {-> annotation}
 !nopar | {args} redef visibility atid opar no at_args [n2]:no cpar annotations_o~nopar {-> New annotation(Null, redef.kwredef, visibility, atid, opar, [at_args.expr], cpar, annotations_o~nopar.annotations)}
        ;
 
-many_annotations {-> annotations}
-       = {many} annotation_list {-> New annotations(Null, Null, [annotation_list.annotation], Null)}
-       ;
-
 annotation_list {-> annotation*}
        = {many} one_annotation_list annotations_tail* {-> [one_annotation_list.annotation, annotations_tail.annotation] }
        ;
@@ -683,18 +723,15 @@ annotations_tail {-> annotation}
        = comma no one_annotation_list {-> one_annotation_list.annotation}
        ;
 
-line_annotations {-> annotations}
-       = line_annotation+ {-> New annotations(Null, Null, [line_annotation.annotation], Null) }
-       ;
 line_annotation {-> annotation}
-       = [doc]:no redef visibility atid annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [], Null, annotations)}
-       | {args} [doc]:no redef visibility atid opar no at_args cpar annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, opar, [at_args.expr], cpar, annotations)}
-       | {nopar} [doc]:no redef visibility atid at_args_nopar n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [at_args_nopar.expr], Null, Null)}
+       = [doc]:nd redef visibility atid annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [], Null, annotations)}
+       | {args} [doc]:nd redef visibility atid opar no at_args cpar annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, opar, [at_args.expr], cpar, annotations)}
+       | {nopar} [doc]:nd redef visibility atid at_args_nopar n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [at_args_nopar.expr], Null, Null)}
        ;
 line_annotation_forclass {-> propdef}
-       = [doc]:no atid_forclass annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [], Null, annotations)}
-       | {args} [doc]:no atid_forclass opar no at_args cpar annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, opar, [at_args.expr], cpar, annotations)}
-       | {nopar} [doc]:no atid_forclass at_args_nopar {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [at_args_nopar.expr], Null, Null)}
+       = [doc]:nd atid_forclass annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [], Null, annotations)}
+       | {args} [doc]:nd atid_forclass opar no at_args cpar annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, opar, [at_args.expr], cpar, annotations)}
+       | {nopar} [doc]:nd atid_forclass at_args_nopar {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [at_args_nopar.expr], Null, Null)}
        ;
 
 at_args~nopar {-> expr* }
@@ -743,12 +780,10 @@ args_nopar {-> exprs}
        ;
 braargs        {-> exprs}
        = obra no expr_list cbra {-> New exprs.bra(obra, [expr_list.expr], cbra)};
-args_list {-> exprs}
-       = expr_list {-> New exprs.list([expr_list.expr])};
 expr_list {-> expr*}
-       = expr [n2]:no expr_tail* {-> [expr, expr_tail.expr]};
+       = arg [n2]:no expr_tail* {-> [arg.expr, expr_tail.expr]};
 expr_tail {-> expr} 
-       = comma no expr [n2]:no {-> expr};
+       = comma no arg [n2]:no {-> arg.expr};
 idlist {-> id*}
        = opar no idlist_nopar [n2]:no cpar {-> [idlist_nopar.id]}
        | {nopar} idlist_nopar {-> [idlist_nopar.id]}
@@ -789,19 +824,32 @@ kwend_o {-> kwend?}
        = kwend? {-> kwend}
        ;
 
-n1     = {a} comment | {b} eol;
-n {-> doc?}
-       = {a} n2? comment+ {-> New doc([comment])}
-       | {b} n2 {-> Null}
+/* A single hard break */
+n1     = {a} comment | {b} eol | {c} semi;
+
+/* A mandatory hard break, returns the last comment */
+n~nosemi {-> doc?}
+       = {a} n2* comment+ {-> New doc([comment])}
+       | {b} n2+ {-> Null}
+!nosemi | {c} n2* comment* semi n? {-> n.doc }
        ;
-no {-> doc?}
+
+/* An optional hard break, returns the last comment.
+ * Used mainly to introduce optional documentation */
+nd {-> doc?}
        = {empty} {-> Null}
        | n {-> n.doc}
        ;
 
+/* An optional soft break.
+ * Used when a unambiguous line break or comment could be inserted/ */
+no
+       = {empty}
+       | n_nosemi
+       ;
+
 n2
-       = {a} n2? comment+ eol+
-       | {b} eol+
+       = {a} comment* eol
        ;
 
 /*****************************************************************************/
@@ -824,7 +872,7 @@ visibility
        | {intrude} kwintrude
        ;
 
-classdef= {std} doc? kwredef? visibility classkind [id]:classid? [formaldefs]:formaldef* extern_code_block? [propdefs]:propdef* kwend
+classdef= {std} doc? kwredef? visibility classkind [id]:classid? obra? [formaldefs]:formaldef* cbra? extern_code_block? [propdefs]:propdef* kwend
        | {top} [propdefs]:propdef*
        | {main} [propdefs]:propdef*
        ;
@@ -838,22 +886,46 @@ classkind
 formaldef = [id]:classid type? annotations?;
 
 
-propdef = {attr} doc? kwredef? visibility kwvar [id2]:id type? expr? annotations? [block]:expr?
+propdef = {attr} doc? kwredef? visibility kwvar [id2]:id type? assign? expr? annotations? kwdo? [block]:expr? kwend?
        | {main_meth} kwredef? [block]:expr?
        | {type} doc? kwredef? visibility kwtype [id]:classid type annotations?
-       | {meth} doc? kwredef? visibility kwmeth? kwinit? kwnew? methid? signature annotations? extern_calls? extern_code_block? [block]:expr?
+       | {meth} doc? kwredef? visibility kwmeth? kwinit? kwnew? methid? signature annotations? extern_calls? extern_code_block? kwdo? [block]:expr? kwend?
        | {super} doc? kwredef? visibility kwsuper type annotations?
        | {annot} doc? kwredef? visibility? atid opar? [args]:expr* cpar? annotations?
        ;
 
-methid = {id} id | {plus} plus | {minus} minus | {star} star | {starstar} starstar | {slash} slash | {percent} percent | {eq} eq | {ne} ne | {le} le | {ge} ge | {lt} lt | {gt} gt |  {ll} ll | {gg} gg | {bra} obra cbra | {starship} starship | {assign} id assign | {braassign} obra cbra assign;
+methid
+       = {id} id
+       | {plus} [op]:plus
+       | {minus} [op]:minus
+       | {star} [op]:star
+       | {starstar} [op]:starstar
+       | {slash} [op]:slash
+       | {percent} [op]:percent
+       | {eq} [op]:eq
+       | {ne} [op]:ne
+       | {le} [op]:le
+       | {ge} [op]:ge
+       | {lt} [op]:lt
+       | {gt} [op]:gt
+       | {ll} [op]:ll
+       | {gg} [op]:gg
+       | {starship} [op]:starship
+       | {pipe} [op]:pipe
+       | {caret} [op]:caret
+       | {amp} [op]:amp
+       | {tilde} [op]:tilde
+       | {bra} obra cbra
+       | {assign} id assign
+       | {braassign} obra cbra assign
+       ;
 
 signature = opar? [params]:param* cpar? type?;
 
 param  = id type? dotdotdot? annotations?
        ;
 
-type   = kwnullable? [id]:classid [types]:type* annotations?;
+type   = kwnullable? [id]:classid obra? [types]:type* cbra? annotations?;
 
 label = kwlabel id?;
 
@@ -864,13 +936,13 @@ expr      = {block} expr* kwend?
        | {abort} kwabort
        | {continue} kwcontinue? label?
        | {do} kwdo [block]:expr? label?
-       | {if} kwif expr [then]:expr? [else]:expr? 
+       | {if} kwif expr kwthen [then]:expr? kwelse? [else]:expr?
        | {ifexpr} kwif expr kwthen [then]:expr kwelse [else]:expr
        | {while} kwwhile expr kwdo [block]:expr? label?
        | {loop} kwloop [block]:expr? label?
-       | {for} kwfor [ids]:id* expr kwdo [block]:expr? label?
+       | {for} kwfor [ids]:id* kwin expr kwdo [block]:expr? label?
        | {with} kwwith expr kwdo [block]:expr? label?
-       | {assert} kwassert id? expr [else]:expr?
+       | {assert} kwassert id? expr kwelse? [else]:expr?
        | {once} kwonce expr 
        | {send} expr 
        | {binop} expr [expr2]:expr 
@@ -895,8 +967,12 @@ expr       = {block} expr* kwend?
        | {starstar} expr [op]:starstar [expr2]:expr
        | {slash} expr [op]:slash [expr2]:expr
        | {percent} expr [op]:percent [expr2]:expr
-       | {uminus} minus expr 
-       | {uplus} plus expr
+       | {pipe} expr [op]:pipe [expr2]:expr
+       | {caret} expr [op]:caret [expr2]:expr
+       | {amp} expr [op]:amp [expr2]:expr
+       | {uminus} [op]:minus expr
+       | {uplus} [op]:plus expr
+       | {utilde} [op]:tilde expr
        | {new} kwnew type id? [args]:exprs
        | {attr} expr [id]:attrid 
        | {attr_assign} expr [id]:attrid assign [value]:expr 
@@ -913,8 +989,8 @@ expr        = {block} expr* kwend?
        | {var_assign} id assign [value]:expr 
        | {var_reassign} id assign_op [value]:expr 
        | {range} expr [expr2]:expr annotations?
-       | {crange} obra expr [expr2]:expr cbra annotations?
-       | {orange} obra expr [expr2]:expr [cbra]:obra annotations?
+       | {crange} obra expr dotdot [expr2]:expr cbra annotations?
+       | {orange} obra expr dotdot [expr2]:expr [cbra]:obra annotations?
        | {array} obra [exprs]:expr* type? cbra annotations?
        | {self} kwself annotations?
        | {implicit_self} 
@@ -936,6 +1012,7 @@ expr       = {block} expr* kwend?
        | {isset_attr} kwisset expr [id]:attrid
        | {debug_type} kwdebug kwtype expr type
        | {vararg} expr dotdotdot
+       | {namedarg} id assign expr
        | {type} type
        | {methid} expr [id]:methid
        | {at} annotations
@@ -953,6 +1030,9 @@ assign_op
        | {slash} [op]:slasheq
        | {percent} [op]:percenteq
        | {starstar} [op]:starstareq
+       | {pipe} [op]:pipeeq
+       | {caret} [op]:careteq
+       | {amp} [op]:ampeq
        | {ll} [op]:lleq
        | {gg} [op]:ggeq
        ;
@@ -976,7 +1056,7 @@ qualified = id* classid? ;
 
 doc = comment+;
 
-annotations = at? opar? [items]:annotation* cpar?;
+annotations = kwis? at? opar? [items]:annotation* cpar? kwend?;
 
 annotation = doc? kwredef? visibility? atid opar? [args]:expr* cpar? annotations?;
 
index a5172f7..a815804 100644 (file)
@@ -38,26 +38,26 @@ redef class Parser
                        new ReduceAction24(5),
                        new ReduceAction26(6),
                        new ReduceAction27(6),
+                       new ReduceAction28(6),
+                       new ReduceAction29(6),
                        new ReduceAction22(7),
-                       new ReduceAction29(7),
-                       new ReduceAction30(8),
-                       new ReduceAction31(8),
+                       new ReduceAction31(7),
                        new ReduceAction32(8),
                        new ReduceAction33(8),
                        new ReduceAction34(8),
-                       new ReduceAction35(9),
-                       new ReduceAction36(9),
+                       new ReduceAction35(8),
+                       new ReduceAction36(8),
                        new ReduceAction37(9),
-                       new ReduceAction38(10),
-                       new ReduceAction39(11),
-                       new ReduceAction40(11),
-                       new ReduceAction41(12),
-                       new ReduceAction42(13),
-                       new ReduceAction43(13),
+                       new ReduceAction38(9),
+                       new ReduceAction39(9),
+                       new ReduceAction40(10),
+                       new ReduceAction41(11),
+                       new ReduceAction42(11),
+                       new ReduceAction43(12),
                        new ReduceAction44(13),
-                       new ReduceAction45(14),
-                       new ReduceAction46(15),
-                       new ReduceAction47(15),
+                       new ReduceAction45(13),
+                       new ReduceAction46(13),
+                       new ReduceAction47(14),
                        new ReduceAction48(15),
                        new ReduceAction49(15),
                        new ReduceAction50(15),
@@ -83,19 +83,19 @@ redef class Parser
                        new ReduceAction70(15),
                        new ReduceAction71(15),
                        new ReduceAction72(15),
-                       new ReduceAction72(15),
-                       new ReduceAction74(16),
-                       new ReduceAction75(16),
+                       new ReduceAction73(15),
+                       new ReduceAction74(15),
+                       new ReduceAction74(15),
+                       new ReduceAction76(16),
+                       new ReduceAction77(16),
                        new ReduceAction22(16),
-                       new ReduceAction74(17),
-                       new ReduceAction78(17),
-                       new ReduceAction79(18),
-                       new ReduceAction80(18),
+                       new ReduceAction76(17),
+                       new ReduceAction80(17),
                        new ReduceAction81(18),
                        new ReduceAction82(18),
                        new ReduceAction83(18),
-                       new ReduceAction84(19),
-                       new ReduceAction85(19),
+                       new ReduceAction84(18),
+                       new ReduceAction85(18),
                        new ReduceAction86(19),
                        new ReduceAction87(19),
                        new ReduceAction88(19),
@@ -113,930 +113,995 @@ redef class Parser
                        new ReduceAction100(19),
                        new ReduceAction101(19),
                        new ReduceAction102(19),
-                       new ReduceAction103(20),
-                       new ReduceAction104(20),
-                       new ReduceAction105(20),
-                       new ReduceAction106(20),
-                       new ReduceAction107(21),
-                       new ReduceAction108(21),
-                       new ReduceAction37(21),
-                       new ReduceAction110(22),
-                       new ReduceAction111(23),
-                       new ReduceAction112(23),
-                       new ReduceAction113(23),
-                       new ReduceAction114(23),
-                       new ReduceAction115(23),
-                       new ReduceAction116(24),
-                       new ReduceAction117(24),
+                       new ReduceAction103(19),
+                       new ReduceAction104(19),
+                       new ReduceAction105(19),
+                       new ReduceAction106(19),
+                       new ReduceAction107(19),
+                       new ReduceAction108(19),
+                       new ReduceAction109(20),
+                       new ReduceAction110(20),
+                       new ReduceAction111(20),
+                       new ReduceAction112(20),
+                       new ReduceAction113(21),
+                       new ReduceAction114(21),
+                       new ReduceAction39(21),
+                       new ReduceAction116(22),
+                       new ReduceAction117(23),
+                       new ReduceAction118(23),
+                       new ReduceAction119(23),
+                       new ReduceAction120(23),
+                       new ReduceAction121(23),
+                       new ReduceAction122(24),
+                       new ReduceAction123(24),
                        new ReduceAction22(24),
-                       new ReduceAction119(25),
-                       new ReduceAction120(26),
-                       new ReduceAction120(26),
-                       new ReduceAction122(26),
-                       new ReduceAction123(27),
-                       new ReduceAction124(27),
-                       new ReduceAction125(27),
-                       new ReduceAction126(28),
-                       new ReduceAction127(28),
-                       new ReduceAction128(28),
-                       new ReduceAction129(28),
-                       new ReduceAction130(28),
-                       new ReduceAction131(28),
+                       new ReduceAction125(25),
+                       new ReduceAction126(26),
+                       new ReduceAction126(26),
+                       new ReduceAction128(26),
+                       new ReduceAction129(27),
+                       new ReduceAction130(27),
+                       new ReduceAction131(27),
+                       new ReduceAction132(28),
+                       new ReduceAction133(28),
+                       new ReduceAction134(28),
+                       new ReduceAction135(28),
+                       new ReduceAction136(28),
+                       new ReduceAction137(28),
                        new ReduceAction22(29),
-                       new ReduceAction133(29),
-                       new ReduceAction134(30),
-                       new ReduceAction135(31),
-                       new ReduceAction136(31),
-                       new ReduceAction137(32),
+                       new ReduceAction139(29),
+                       new ReduceAction140(30),
+                       new ReduceAction141(31),
+                       new ReduceAction142(31),
+                       new ReduceAction143(32),
                        new ReduceAction22(32),
-                       new ReduceAction139(33),
-                       new ReduceAction140(34),
-                       new ReduceAction141(34),
-                       new ReduceAction142(34),
-                       new ReduceAction143(34),
-                       new ReduceAction144(35),
-                       new ReduceAction145(35),
-                       new ReduceAction146(36),
-                       new ReduceAction146(37),
-                       new ReduceAction146(38),
+                       new ReduceAction145(33),
+                       new ReduceAction146(34),
+                       new ReduceAction147(34),
+                       new ReduceAction148(34),
+                       new ReduceAction149(34),
+                       new ReduceAction150(35),
+                       new ReduceAction151(35),
+                       new ReduceAction152(36),
+                       new ReduceAction152(37),
+                       new ReduceAction152(38),
                        new ReduceAction22(38),
-                       new ReduceAction150(39),
-                       new ReduceAction151(39),
-                       new ReduceAction152(39),
-                       new ReduceAction153(39),
-                       new ReduceAction154(40),
-                       new ReduceAction155(40),
-                       new ReduceAction156(41),
-                       new ReduceAction157(41),
-                       new ReduceAction158(42),
-                       new ReduceAction159(42),
-                       new ReduceAction150(43),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction163(44),
-                       new ReduceAction164(44),
-                       new ReduceAction165(44),
-                       new ReduceAction166(44),
-                       new ReduceAction167(44),
-                       new ReduceAction168(44),
+                       new ReduceAction156(39),
+                       new ReduceAction157(39),
+                       new ReduceAction158(39),
+                       new ReduceAction159(39),
+                       new ReduceAction160(40),
+                       new ReduceAction161(40),
+                       new ReduceAction162(41),
+                       new ReduceAction163(41),
+                       new ReduceAction164(42),
+                       new ReduceAction165(42),
+                       new ReduceAction156(43),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
                        new ReduceAction169(44),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction153(44),
-                       new ReduceAction177(44),
-                       new ReduceAction178(44),
-                       new ReduceAction179(44),
-                       new ReduceAction178(44),
-                       new ReduceAction181(44),
-                       new ReduceAction182(44),
+                       new ReduceAction170(44),
+                       new ReduceAction171(44),
+                       new ReduceAction172(44),
+                       new ReduceAction173(44),
+                       new ReduceAction174(44),
+                       new ReduceAction175(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
                        new ReduceAction183(44),
-                       new ReduceAction182(44),
+                       new ReduceAction184(44),
                        new ReduceAction185(44),
-                       new ReduceAction186(44),
+                       new ReduceAction184(44),
                        new ReduceAction187(44),
                        new ReduceAction188(44),
                        new ReduceAction189(44),
                        new ReduceAction188(44),
                        new ReduceAction191(44),
                        new ReduceAction192(44),
-                       new ReduceAction191(44),
+                       new ReduceAction193(44),
                        new ReduceAction194(44),
-                       new ReduceAction195(45),
-                       new ReduceAction196(45),
-                       new ReduceAction197(46),
-                       new ReduceAction198(46),
-                       new ReduceAction199(46),
-                       new ReduceAction200(46),
-                       new ReduceAction201(47),
-                       new ReduceAction202(47),
-                       new ReduceAction203(47),
-                       new ReduceAction204(47),
-                       new ReduceAction205(47),
-                       new ReduceAction206(47),
+                       new ReduceAction195(44),
+                       new ReduceAction194(44),
+                       new ReduceAction197(44),
+                       new ReduceAction198(44),
+                       new ReduceAction197(44),
+                       new ReduceAction200(44),
+                       new ReduceAction201(45),
+                       new ReduceAction202(45),
+                       new ReduceAction203(46),
+                       new ReduceAction204(46),
+                       new ReduceAction205(46),
+                       new ReduceAction206(46),
                        new ReduceAction207(47),
                        new ReduceAction208(47),
-                       new ReduceAction205(47),
-                       new ReduceAction206(47),
+                       new ReduceAction209(47),
+                       new ReduceAction210(47),
                        new ReduceAction211(47),
                        new ReduceAction212(47),
                        new ReduceAction213(47),
                        new ReduceAction214(47),
-                       new ReduceAction215(47),
-                       new ReduceAction216(47),
-                       new ReduceAction213(47),
-                       new ReduceAction214(47),
+                       new ReduceAction211(47),
+                       new ReduceAction212(47),
+                       new ReduceAction217(47),
+                       new ReduceAction218(47),
                        new ReduceAction219(47),
                        new ReduceAction220(47),
                        new ReduceAction221(47),
                        new ReduceAction222(47),
-                       new ReduceAction223(47),
-                       new ReduceAction224(47),
+                       new ReduceAction219(47),
+                       new ReduceAction220(47),
                        new ReduceAction225(47),
                        new ReduceAction226(47),
                        new ReduceAction227(47),
-                       new ReduceAction224(47),
-                       new ReduceAction225(47),
+                       new ReduceAction228(47),
+                       new ReduceAction229(47),
                        new ReduceAction230(47),
                        new ReduceAction231(47),
                        new ReduceAction232(47),
                        new ReduceAction233(47),
-                       new ReduceAction234(47),
-                       new ReduceAction235(47),
-                       new ReduceAction232(47),
-                       new ReduceAction233(47),
+                       new ReduceAction230(47),
+                       new ReduceAction231(47),
+                       new ReduceAction236(47),
+                       new ReduceAction237(47),
                        new ReduceAction238(47),
-                       new ReduceAction239(48),
-                       new ReduceAction240(48),
-                       new ReduceAction241(48),
-                       new ReduceAction242(48),
-                       new ReduceAction243(48),
-                       new ReduceAction244(48),
+                       new ReduceAction239(47),
+                       new ReduceAction240(47),
+                       new ReduceAction241(47),
+                       new ReduceAction238(47),
+                       new ReduceAction239(47),
+                       new ReduceAction244(47),
                        new ReduceAction245(48),
                        new ReduceAction246(48),
-                       new ReduceAction247(49),
-                       new ReduceAction248(49),
-                       new ReduceAction249(50),
-                       new ReduceAction250(50),
-                       new ReduceAction251(50),
-                       new ReduceAction252(50),
-                       new ReduceAction253(50),
-                       new ReduceAction150(51),
-                       new ReduceAction152(51),
-                       new ReduceAction256(52),
-                       new ReduceAction257(52),
-                       new ReduceAction258(53),
-                       new ReduceAction259(53),
-                       new ReduceAction260(54),
-                       new ReduceAction261(54),
-                       new ReduceAction262(55),
-                       new ReduceAction263(55),
-                       new ReduceAction264(56),
-                       new ReduceAction265(56),
-                       new ReduceAction153(56),
-                       new ReduceAction267(57),
-                       new ReduceAction268(57),
-                       new ReduceAction269(57),
-                       new ReduceAction270(57),
-                       new ReduceAction271(58),
-                       new ReduceAction153(59),
-                       new ReduceAction273(59),
-                       new ReduceAction153(60),
-                       new ReduceAction275(60),
-                       new ReduceAction276(60),
-                       new ReduceAction277(60),
-                       new ReduceAction278(60),
-                       new ReduceAction153(61),
-                       new ReduceAction280(61),
-                       new ReduceAction153(62),
-                       new ReduceAction282(62),
-                       new ReduceAction283(62),
-                       new ReduceAction284(62),
-                       new ReduceAction285(62),
-                       new ReduceAction286(62),
-                       new ReduceAction287(62),
-                       new ReduceAction288(62),
-                       new ReduceAction289(62),
-                       new ReduceAction290(62),
-                       new ReduceAction291(62),
-                       new ReduceAction153(63),
-                       new ReduceAction293(63),
-                       new ReduceAction294(63),
-                       new ReduceAction153(64),
-                       new ReduceAction296(64),
-                       new ReduceAction297(64),
-                       new ReduceAction298(64),
-                       new ReduceAction153(65),
-                       new ReduceAction300(65),
-                       new ReduceAction153(66),
-                       new ReduceAction302(66),
-                       new ReduceAction303(66),
-                       new ReduceAction304(66),
-                       new ReduceAction153(67),
-                       new ReduceAction306(67),
-                       new ReduceAction307(67),
-                       new ReduceAction308(67),
-                       new ReduceAction309(67),
-                       new ReduceAction153(68),
-                       new ReduceAction311(68),
-                       new ReduceAction312(68),
-                       new ReduceAction177(68),
+                       new ReduceAction247(48),
+                       new ReduceAction248(48),
+                       new ReduceAction249(48),
+                       new ReduceAction250(48),
+                       new ReduceAction251(48),
+                       new ReduceAction252(48),
+                       new ReduceAction253(48),
+                       new ReduceAction254(48),
+                       new ReduceAction255(48),
+                       new ReduceAction256(49),
+                       new ReduceAction257(49),
+                       new ReduceAction258(50),
+                       new ReduceAction259(50),
+                       new ReduceAction260(50),
+                       new ReduceAction261(50),
+                       new ReduceAction262(50),
+                       new ReduceAction263(50),
+                       new ReduceAction264(50),
+                       new ReduceAction265(50),
+                       new ReduceAction158(51),
+                       new ReduceAction267(52),
+                       new ReduceAction268(52),
+                       new ReduceAction269(53),
+                       new ReduceAction270(53),
+                       new ReduceAction271(54),
+                       new ReduceAction272(54),
+                       new ReduceAction273(55),
+                       new ReduceAction274(55),
+                       new ReduceAction275(56),
+                       new ReduceAction276(56),
+                       new ReduceAction159(56),
+                       new ReduceAction278(57),
+                       new ReduceAction279(57),
+                       new ReduceAction280(57),
+                       new ReduceAction281(57),
+                       new ReduceAction282(58),
+                       new ReduceAction159(59),
+                       new ReduceAction284(59),
+                       new ReduceAction159(60),
+                       new ReduceAction286(60),
+                       new ReduceAction287(60),
+                       new ReduceAction288(60),
+                       new ReduceAction289(60),
+                       new ReduceAction159(61),
+                       new ReduceAction291(61),
+                       new ReduceAction159(62),
+                       new ReduceAction293(62),
+                       new ReduceAction294(62),
+                       new ReduceAction295(62),
+                       new ReduceAction296(62),
+                       new ReduceAction297(62),
+                       new ReduceAction298(62),
+                       new ReduceAction299(62),
+                       new ReduceAction300(62),
+                       new ReduceAction159(63),
+                       new ReduceAction302(63),
+                       new ReduceAction159(64),
+                       new ReduceAction304(64),
+                       new ReduceAction159(65),
+                       new ReduceAction306(65),
+                       new ReduceAction159(66),
+                       new ReduceAction308(66),
+                       new ReduceAction309(66),
+                       new ReduceAction159(67),
+                       new ReduceAction311(67),
+                       new ReduceAction312(67),
+                       new ReduceAction159(68),
                        new ReduceAction314(68),
-                       new ReduceAction178(68),
-                       new ReduceAction316(68),
-                       new ReduceAction179(68),
-                       new ReduceAction318(68),
-                       new ReduceAction178(68),
+                       new ReduceAction315(68),
                        new ReduceAction316(68),
-                       new ReduceAction181(68),
-                       new ReduceAction322(68),
-                       new ReduceAction182(68),
-                       new ReduceAction324(68),
-                       new ReduceAction183(68),
-                       new ReduceAction326(68),
-                       new ReduceAction182(68),
-                       new ReduceAction324(68),
-                       new ReduceAction185(68),
-                       new ReduceAction330(68),
-                       new ReduceAction186(68),
-                       new ReduceAction332(68),
-                       new ReduceAction187(68),
-                       new ReduceAction334(68),
-                       new ReduceAction335(68),
-                       new ReduceAction336(68),
-                       new ReduceAction337(68),
-                       new ReduceAction338(68),
-                       new ReduceAction339(68),
-                       new ReduceAction340(68),
-                       new ReduceAction341(68),
-                       new ReduceAction338(68),
-                       new ReduceAction339(68),
-                       new ReduceAction344(68),
-                       new ReduceAction345(68),
-                       new ReduceAction346(68),
-                       new ReduceAction347(68),
-                       new ReduceAction348(69),
-                       new ReduceAction349(69),
-                       new ReduceAction350(69),
-                       new ReduceAction351(69),
-                       new ReduceAction352(69),
-                       new ReduceAction353(69),
-                       new ReduceAction354(69),
-                       new ReduceAction355(69),
-                       new ReduceAction356(69),
-                       new ReduceAction153(69),
-                       new ReduceAction153(69),
-                       new ReduceAction359(69),
-                       new ReduceAction360(69),
-                       new ReduceAction361(69),
-                       new ReduceAction362(70),
-                       new ReduceAction362(70),
-                       new ReduceAction364(71),
+                       new ReduceAction159(69),
+                       new ReduceAction318(69),
+                       new ReduceAction159(70),
+                       new ReduceAction320(70),
+                       new ReduceAction321(70),
+                       new ReduceAction322(70),
+                       new ReduceAction323(70),
+                       new ReduceAction159(71),
+                       new ReduceAction325(71),
+                       new ReduceAction326(71),
+                       new ReduceAction327(71),
+                       new ReduceAction328(71),
+                       new ReduceAction159(72),
+                       new ReduceAction330(72),
+                       new ReduceAction331(72),
+                       new ReduceAction183(72),
+                       new ReduceAction333(72),
+                       new ReduceAction184(72),
+                       new ReduceAction335(72),
+                       new ReduceAction185(72),
+                       new ReduceAction337(72),
+                       new ReduceAction184(72),
+                       new ReduceAction335(72),
+                       new ReduceAction187(72),
+                       new ReduceAction341(72),
+                       new ReduceAction188(72),
+                       new ReduceAction343(72),
+                       new ReduceAction189(72),
+                       new ReduceAction345(72),
+                       new ReduceAction188(72),
+                       new ReduceAction343(72),
+                       new ReduceAction191(72),
+                       new ReduceAction349(72),
+                       new ReduceAction192(72),
+                       new ReduceAction351(72),
+                       new ReduceAction193(72),
+                       new ReduceAction353(72),
+                       new ReduceAction354(72),
+                       new ReduceAction355(72),
+                       new ReduceAction356(72),
+                       new ReduceAction357(72),
+                       new ReduceAction358(72),
+                       new ReduceAction359(72),
+                       new ReduceAction360(72),
+                       new ReduceAction357(72),
+                       new ReduceAction358(72),
+                       new ReduceAction363(72),
+                       new ReduceAction364(72),
                        new ReduceAction365(72),
-                       new ReduceAction366(73),
+                       new ReduceAction159(73),
                        new ReduceAction367(73),
-                       new ReduceAction365(74),
-                       new ReduceAction369(75),
-                       new ReduceAction261(75),
-                       new ReduceAction371(75),
-                       new ReduceAction372(76),
-                       new ReduceAction373(76),
-                       new ReduceAction374(77),
-                       new ReduceAction375(77),
-                       new ReduceAction376(78),
-                       new ReduceAction374(79),
-                       new ReduceAction375(79),
-                       new ReduceAction379(80),
-                       new ReduceAction380(81),
-                       new ReduceAction381(82),
-                       new ReduceAction382(82),
-                       new ReduceAction383(83),
-                       new ReduceAction22(83),
-                       new ReduceAction385(84),
-                       new ReduceAction386(84),
-                       new ReduceAction387(85),
-                       new ReduceAction388(86),
-                       new ReduceAction389(86),
-                       new ReduceAction385(87),
-                       new ReduceAction386(87),
-                       new ReduceAction392(87),
-                       new ReduceAction153(88),
-                       new ReduceAction394(89),
-                       new ReduceAction387(90),
-                       new ReduceAction396(91),
-                       new ReduceAction397(91),
-                       new ReduceAction398(91),
-                       new ReduceAction399(91),
-                       new ReduceAction400(91),
-                       new ReduceAction401(92),
-                       new ReduceAction402(92),
-                       new ReduceAction403(92),
-                       new ReduceAction404(92),
-                       new ReduceAction405(92),
-                       new ReduceAction366(93),
-                       new ReduceAction367(93),
-                       new ReduceAction365(94),
-                       new ReduceAction409(95),
-                       new ReduceAction153(95),
-                       new ReduceAction153(95),
-                       new ReduceAction412(95),
-                       new ReduceAction413(95),
-                       new ReduceAction414(95),
-                       new ReduceAction415(96),
-                       new ReduceAction416(96),
-                       new ReduceAction417(96),
-                       new ReduceAction418(97),
-                       new ReduceAction419(97),
-                       new ReduceAction418(98),
-                       new ReduceAction421(98),
-                       new ReduceAction419(98),
-                       new ReduceAction423(98),
-                       new ReduceAction424(99),
-                       new ReduceAction425(100),
-                       new ReduceAction375(101),
-                       new ReduceAction427(101),
-                       new ReduceAction428(102),
-                       new ReduceAction429(103),
-                       new ReduceAction430(103),
-                       new ReduceAction431(104),
-                       new ReduceAction432(104),
-                       new ReduceAction433(105),
-                       new ReduceAction434(105),
-                       new ReduceAction435(105),
-                       new ReduceAction436(105),
-                       new ReduceAction437(106),
-                       new ReduceAction438(106),
-                       new ReduceAction439(106),
-                       new ReduceAction22(106),
-                       new ReduceAction441(107),
-                       new ReduceAction442(107),
-                       new ReduceAction443(107),
-                       new ReduceAction442(107),
-                       new ReduceAction445(108),
-                       new ReduceAction446(108),
-                       new ReduceAction447(108),
-                       new ReduceAction446(108),
-                       new ReduceAction449(109),
-                       new ReduceAction450(110),
-                       new ReduceAction22(111),
-                       new ReduceAction452(111),
-                       new ReduceAction453(112),
-                       new ReduceAction453(112),
-                       new ReduceAction455(113),
-                       new ReduceAction456(113),
-                       new ReduceAction23(113),
-                       new ReduceAction22(114),
-                       new ReduceAction459(114),
-                       new ReduceAction460(115),
-                       new ReduceAction461(115),
-                       new ReduceAction453(115),
-                       new ReduceAction46(116),
-                       new ReduceAction47(116),
-                       new ReduceAction48(116),
-                       new ReduceAction55(116),
-                       new ReduceAction56(116),
-                       new ReduceAction74(117),
-                       new ReduceAction75(117),
-                       new ReduceAction84(118),
-                       new ReduceAction85(118),
-                       new ReduceAction86(118),
-                       new ReduceAction87(118),
-                       new ReduceAction88(118),
-                       new ReduceAction89(118),
-                       new ReduceAction90(118),
-                       new ReduceAction91(118),
-                       new ReduceAction92(118),
-                       new ReduceAction93(118),
-                       new ReduceAction94(118),
-                       new ReduceAction95(118),
-                       new ReduceAction96(118),
-                       new ReduceAction97(118),
-                       new ReduceAction98(118),
-                       new ReduceAction99(118),
-                       new ReduceAction100(118),
-                       new ReduceAction101(118),
-                       new ReduceAction445(119),
-                       new ReduceAction446(119),
-                       new ReduceAction447(119),
-                       new ReduceAction446(119),
-                       new ReduceAction140(120),
-                       new ReduceAction141(120),
-                       new ReduceAction153(121),
-                       new ReduceAction273(121),
-                       new ReduceAction153(122),
-                       new ReduceAction275(122),
-                       new ReduceAction276(122),
-                       new ReduceAction277(122),
-                       new ReduceAction278(122),
-                       new ReduceAction153(123),
-                       new ReduceAction280(123),
-                       new ReduceAction153(124),
-                       new ReduceAction282(124),
-                       new ReduceAction283(124),
+                       new ReduceAction368(73),
+                       new ReduceAction369(74),
+                       new ReduceAction370(74),
+                       new ReduceAction371(74),
+                       new ReduceAction372(74),
+                       new ReduceAction373(74),
+                       new ReduceAction374(74),
+                       new ReduceAction375(74),
+                       new ReduceAction376(74),
+                       new ReduceAction377(74),
+                       new ReduceAction159(74),
+                       new ReduceAction159(74),
+                       new ReduceAction380(74),
+                       new ReduceAction381(74),
+                       new ReduceAction382(74),
+                       new ReduceAction383(75),
+                       new ReduceAction383(75),
+                       new ReduceAction385(76),
+                       new ReduceAction386(77),
+                       new ReduceAction387(78),
+                       new ReduceAction388(78),
+                       new ReduceAction386(79),
+                       new ReduceAction390(80),
+                       new ReduceAction272(80),
+                       new ReduceAction392(80),
+                       new ReduceAction393(81),
+                       new ReduceAction394(81),
+                       new ReduceAction395(82),
+                       new ReduceAction396(82),
+                       new ReduceAction397(83),
+                       new ReduceAction395(84),
+                       new ReduceAction396(84),
+                       new ReduceAction400(85),
+                       new ReduceAction401(86),
+                       new ReduceAction402(87),
+                       new ReduceAction403(87),
+                       new ReduceAction404(88),
+                       new ReduceAction22(88),
+                       new ReduceAction406(89),
+                       new ReduceAction407(89),
+                       new ReduceAction408(90),
+                       new ReduceAction409(90),
+                       new ReduceAction406(91),
+                       new ReduceAction407(91),
+                       new ReduceAction412(91),
+                       new ReduceAction159(92),
+                       new ReduceAction414(93),
+                       new ReduceAction415(94),
+                       new ReduceAction416(94),
+                       new ReduceAction417(94),
+                       new ReduceAction418(94),
+                       new ReduceAction419(94),
+                       new ReduceAction420(95),
+                       new ReduceAction421(95),
+                       new ReduceAction422(95),
+                       new ReduceAction423(95),
+                       new ReduceAction424(95),
+                       new ReduceAction387(96),
+                       new ReduceAction388(96),
+                       new ReduceAction386(97),
+                       new ReduceAction428(98),
+                       new ReduceAction159(98),
+                       new ReduceAction159(98),
+                       new ReduceAction431(98),
+                       new ReduceAction432(98),
+                       new ReduceAction433(98),
+                       new ReduceAction434(99),
+                       new ReduceAction435(99),
+                       new ReduceAction436(99),
+                       new ReduceAction437(100),
+                       new ReduceAction438(100),
+                       new ReduceAction437(101),
+                       new ReduceAction440(101),
+                       new ReduceAction438(101),
+                       new ReduceAction442(101),
+                       new ReduceAction443(102),
+                       new ReduceAction396(103),
+                       new ReduceAction445(103),
+                       new ReduceAction446(104),
+                       new ReduceAction447(105),
+                       new ReduceAction448(105),
+                       new ReduceAction449(106),
+                       new ReduceAction450(106),
+                       new ReduceAction451(107),
+                       new ReduceAction452(107),
+                       new ReduceAction453(107),
+                       new ReduceAction454(107),
+                       new ReduceAction455(108),
+                       new ReduceAction456(108),
+                       new ReduceAction457(108),
+                       new ReduceAction22(108),
+                       new ReduceAction459(109),
+                       new ReduceAction460(109),
+                       new ReduceAction461(109),
+                       new ReduceAction460(109),
+                       new ReduceAction463(110),
+                       new ReduceAction464(110),
+                       new ReduceAction465(110),
+                       new ReduceAction464(110),
+                       new ReduceAction467(111),
+                       new ReduceAction468(112),
+                       new ReduceAction22(113),
+                       new ReduceAction470(113),
+                       new ReduceAction471(114),
+                       new ReduceAction471(114),
+                       new ReduceAction471(114),
+                       new ReduceAction474(115),
+                       new ReduceAction475(115),
+                       new ReduceAction23(115),
+                       new ReduceAction23(115),
+                       new ReduceAction478(115),
+                       new ReduceAction478(115),
+                       new ReduceAction480(115),
+                       new ReduceAction481(115),
+                       new ReduceAction482(115),
+                       new ReduceAction482(115),
+                       new ReduceAction484(115),
+                       new ReduceAction22(116),
+                       new ReduceAction486(116),
+                       new ReduceAction487(117),
+                       new ReduceAction471(117),
+                       new ReduceAction471(118),
+                       new ReduceAction490(118),
+                       new ReduceAction48(119),
+                       new ReduceAction49(119),
+                       new ReduceAction50(119),
+                       new ReduceAction57(119),
+                       new ReduceAction58(119),
+                       new ReduceAction76(120),
+                       new ReduceAction77(120),
+                       new ReduceAction86(121),
+                       new ReduceAction87(121),
+                       new ReduceAction88(121),
+                       new ReduceAction89(121),
+                       new ReduceAction90(121),
+                       new ReduceAction91(121),
+                       new ReduceAction92(121),
+                       new ReduceAction93(121),
+                       new ReduceAction94(121),
+                       new ReduceAction95(121),
+                       new ReduceAction96(121),
+                       new ReduceAction97(121),
+                       new ReduceAction98(121),
+                       new ReduceAction99(121),
+                       new ReduceAction100(121),
+                       new ReduceAction101(121),
+                       new ReduceAction102(121),
+                       new ReduceAction103(121),
+                       new ReduceAction104(121),
+                       new ReduceAction105(121),
+                       new ReduceAction106(121),
+                       new ReduceAction107(121),
+                       new ReduceAction463(122),
+                       new ReduceAction464(122),
+                       new ReduceAction465(122),
+                       new ReduceAction464(122),
+                       new ReduceAction146(123),
+                       new ReduceAction147(123),
+                       new ReduceAction159(124),
                        new ReduceAction284(124),
-                       new ReduceAction285(124),
-                       new ReduceAction286(124),
-                       new ReduceAction287(124),
-                       new ReduceAction288(124),
-                       new ReduceAction289(124),
-                       new ReduceAction290(124),
-                       new ReduceAction291(124),
-                       new ReduceAction153(125),
-                       new ReduceAction293(125),
-                       new ReduceAction294(125),
-                       new ReduceAction153(126),
-                       new ReduceAction296(126),
-                       new ReduceAction297(126),
-                       new ReduceAction298(126),
-                       new ReduceAction153(127),
+                       new ReduceAction159(125),
+                       new ReduceAction286(125),
+                       new ReduceAction287(125),
+                       new ReduceAction288(125),
+                       new ReduceAction289(125),
+                       new ReduceAction159(126),
+                       new ReduceAction291(126),
+                       new ReduceAction159(127),
+                       new ReduceAction293(127),
+                       new ReduceAction294(127),
+                       new ReduceAction295(127),
+                       new ReduceAction296(127),
+                       new ReduceAction297(127),
+                       new ReduceAction298(127),
+                       new ReduceAction299(127),
                        new ReduceAction300(127),
-                       new ReduceAction153(128),
+                       new ReduceAction159(128),
                        new ReduceAction302(128),
-                       new ReduceAction303(128),
-                       new ReduceAction304(128),
-                       new ReduceAction153(129),
-                       new ReduceAction306(129),
-                       new ReduceAction307(129),
-                       new ReduceAction308(129),
-                       new ReduceAction309(129),
-                       new ReduceAction153(130),
-                       new ReduceAction311(130),
-                       new ReduceAction312(130),
-                       new ReduceAction177(130),
-                       new ReduceAction181(130),
-                       new ReduceAction314(130),
-                       new ReduceAction322(130),
-                       new ReduceAction178(130),
-                       new ReduceAction182(130),
-                       new ReduceAction316(130),
-                       new ReduceAction324(130),
-                       new ReduceAction179(130),
-                       new ReduceAction183(130),
-                       new ReduceAction318(130),
-                       new ReduceAction326(130),
-                       new ReduceAction178(130),
-                       new ReduceAction182(130),
-                       new ReduceAction316(130),
-                       new ReduceAction324(130),
-                       new ReduceAction185(130),
-                       new ReduceAction330(130),
-                       new ReduceAction186(130),
-                       new ReduceAction187(130),
-                       new ReduceAction332(130),
-                       new ReduceAction334(130),
-                       new ReduceAction336(130),
-                       new ReduceAction337(130),
-                       new ReduceAction338(130),
-                       new ReduceAction339(130),
-                       new ReduceAction340(130),
-                       new ReduceAction341(130),
-                       new ReduceAction338(130),
-                       new ReduceAction339(130),
-                       new ReduceAction344(130),
-                       new ReduceAction345(130),
-                       new ReduceAction346(130),
-                       new ReduceAction347(130),
-                       new ReduceAction348(131),
-                       new ReduceAction349(131),
-                       new ReduceAction350(131),
-                       new ReduceAction351(131),
-                       new ReduceAction352(131),
-                       new ReduceAction353(131),
-                       new ReduceAction354(131),
-                       new ReduceAction355(131),
-                       new ReduceAction356(131),
-                       new ReduceAction153(131),
-                       new ReduceAction153(131),
-                       new ReduceAction140(132),
-                       new ReduceAction141(132),
-                       new ReduceAction142(132),
-                       new ReduceAction143(132),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction163(133),
-                       new ReduceAction164(133),
-                       new ReduceAction165(133),
-                       new ReduceAction166(133),
-                       new ReduceAction167(133),
-                       new ReduceAction168(133),
-                       new ReduceAction169(133),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction153(133),
-                       new ReduceAction177(133),
-                       new ReduceAction178(133),
-                       new ReduceAction179(133),
-                       new ReduceAction178(133),
-                       new ReduceAction181(133),
-                       new ReduceAction182(133),
-                       new ReduceAction183(133),
-                       new ReduceAction182(133),
-                       new ReduceAction185(133),
-                       new ReduceAction186(133),
-                       new ReduceAction187(133),
-                       new ReduceAction188(133),
-                       new ReduceAction189(133),
-                       new ReduceAction188(133),
-                       new ReduceAction191(133),
-                       new ReduceAction192(133),
-                       new ReduceAction191(133),
-                       new ReduceAction194(133),
-                       new ReduceAction201(134),
-                       new ReduceAction202(134),
-                       new ReduceAction203(134),
-                       new ReduceAction204(134),
-                       new ReduceAction205(134),
-                       new ReduceAction206(134),
-                       new ReduceAction207(134),
-                       new ReduceAction208(134),
-                       new ReduceAction205(134),
-                       new ReduceAction206(134),
-                       new ReduceAction211(134),
-                       new ReduceAction212(134),
-                       new ReduceAction213(134),
-                       new ReduceAction214(134),
-                       new ReduceAction215(134),
-                       new ReduceAction216(134),
-                       new ReduceAction213(134),
-                       new ReduceAction214(134),
-                       new ReduceAction219(134),
-                       new ReduceAction220(134),
-                       new ReduceAction221(134),
-                       new ReduceAction222(134),
-                       new ReduceAction223(134),
-                       new ReduceAction224(134),
-                       new ReduceAction225(134),
-                       new ReduceAction226(134),
-                       new ReduceAction227(134),
-                       new ReduceAction224(134),
-                       new ReduceAction225(134),
-                       new ReduceAction230(134),
-                       new ReduceAction231(134),
-                       new ReduceAction232(134),
-                       new ReduceAction233(134),
-                       new ReduceAction234(134),
-                       new ReduceAction235(134),
-                       new ReduceAction232(134),
-                       new ReduceAction233(134),
-                       new ReduceAction238(134),
-                       new ReduceAction153(135),
-                       new ReduceAction273(135),
-                       new ReduceAction153(136),
-                       new ReduceAction275(136),
-                       new ReduceAction276(136),
-                       new ReduceAction277(136),
-                       new ReduceAction278(136),
-                       new ReduceAction153(137),
-                       new ReduceAction280(137),
-                       new ReduceAction153(138),
-                       new ReduceAction282(138),
-                       new ReduceAction283(138),
-                       new ReduceAction284(138),
-                       new ReduceAction285(138),
-                       new ReduceAction286(138),
-                       new ReduceAction287(138),
-                       new ReduceAction288(138),
-                       new ReduceAction289(138),
-                       new ReduceAction290(138),
-                       new ReduceAction291(138),
-                       new ReduceAction153(139),
-                       new ReduceAction293(139),
-                       new ReduceAction294(139),
-                       new ReduceAction153(140),
-                       new ReduceAction296(140),
-                       new ReduceAction297(140),
-                       new ReduceAction298(140),
-                       new ReduceAction153(141),
-                       new ReduceAction300(141),
-                       new ReduceAction153(142),
-                       new ReduceAction302(142),
-                       new ReduceAction303(142),
-                       new ReduceAction304(142),
-                       new ReduceAction153(143),
-                       new ReduceAction306(143),
-                       new ReduceAction307(143),
-                       new ReduceAction308(143),
-                       new ReduceAction309(143),
-                       new ReduceAction153(144),
-                       new ReduceAction311(144),
-                       new ReduceAction312(144),
-                       new ReduceAction177(144),
-                       new ReduceAction314(144),
-                       new ReduceAction178(144),
-                       new ReduceAction316(144),
-                       new ReduceAction179(144),
-                       new ReduceAction318(144),
-                       new ReduceAction178(144),
-                       new ReduceAction316(144),
-                       new ReduceAction181(144),
-                       new ReduceAction322(144),
-                       new ReduceAction182(144),
-                       new ReduceAction324(144),
-                       new ReduceAction183(144),
-                       new ReduceAction326(144),
-                       new ReduceAction182(144),
-                       new ReduceAction324(144),
-                       new ReduceAction185(144),
-                       new ReduceAction330(144),
-                       new ReduceAction186(144),
-                       new ReduceAction332(144),
-                       new ReduceAction187(144),
-                       new ReduceAction334(144),
-                       new ReduceAction335(144),
-                       new ReduceAction336(144),
-                       new ReduceAction337(144),
-                       new ReduceAction338(144),
-                       new ReduceAction339(144),
-                       new ReduceAction340(144),
-                       new ReduceAction341(144),
-                       new ReduceAction338(144),
-                       new ReduceAction339(144),
-                       new ReduceAction344(144),
-                       new ReduceAction345(144),
-                       new ReduceAction346(144),
-                       new ReduceAction347(144),
-                       new ReduceAction348(145),
-                       new ReduceAction349(145),
-                       new ReduceAction350(145),
-                       new ReduceAction351(145),
-                       new ReduceAction352(145),
-                       new ReduceAction353(145),
-                       new ReduceAction354(145),
-                       new ReduceAction355(145),
-                       new ReduceAction356(145),
-                       new ReduceAction153(145),
-                       new ReduceAction381(146),
-                       new ReduceAction382(146),
-                       new ReduceAction383(147),
-                       new ReduceAction22(147),
-                       new ReduceAction385(148),
-                       new ReduceAction385(149),
-                       new ReduceAction366(150),
-                       new ReduceAction367(150),
-                       new ReduceAction409(151),
-                       new ReduceAction153(151),
-                       new ReduceAction153(151),
-                       new ReduceAction412(151),
-                       new ReduceAction413(151),
-                       new ReduceAction140(152),
-                       new ReduceAction141(152),
-                       new ReduceAction153(153),
-                       new ReduceAction273(153),
-                       new ReduceAction153(154),
-                       new ReduceAction275(154),
-                       new ReduceAction276(154),
-                       new ReduceAction277(154),
-                       new ReduceAction278(154),
-                       new ReduceAction153(155),
-                       new ReduceAction280(155),
-                       new ReduceAction153(156),
-                       new ReduceAction282(156),
-                       new ReduceAction283(156),
-                       new ReduceAction284(156),
-                       new ReduceAction285(156),
-                       new ReduceAction286(156),
-                       new ReduceAction287(156),
-                       new ReduceAction288(156),
-                       new ReduceAction289(156),
-                       new ReduceAction290(156),
-                       new ReduceAction291(156),
-                       new ReduceAction153(157),
-                       new ReduceAction293(157),
-                       new ReduceAction294(157),
-                       new ReduceAction153(158),
-                       new ReduceAction296(158),
-                       new ReduceAction297(158),
-                       new ReduceAction298(158),
-                       new ReduceAction153(159),
-                       new ReduceAction300(159),
-                       new ReduceAction153(160),
-                       new ReduceAction302(160),
-                       new ReduceAction303(160),
-                       new ReduceAction304(160),
-                       new ReduceAction153(161),
-                       new ReduceAction306(161),
-                       new ReduceAction307(161),
-                       new ReduceAction793(161),
-                       new ReduceAction153(162),
-                       new ReduceAction795(162),
-                       new ReduceAction796(162),
-                       new ReduceAction797(162),
-                       new ReduceAction798(162),
-                       new ReduceAction799(162),
-                       new ReduceAction177(162),
-                       new ReduceAction314(162),
-                       new ReduceAction798(162),
-                       new ReduceAction799(162),
-                       new ReduceAction185(162),
-                       new ReduceAction330(162),
-                       new ReduceAction806(162),
-                       new ReduceAction807(162),
-                       new ReduceAction336(162),
-                       new ReduceAction337(162),
-                       new ReduceAction338(162),
-                       new ReduceAction339(162),
-                       new ReduceAction340(162),
-                       new ReduceAction341(162),
-                       new ReduceAction338(162),
-                       new ReduceAction339(162),
-                       new ReduceAction344(162),
-                       new ReduceAction345(162),
-                       new ReduceAction346(162),
-                       new ReduceAction347(162),
-                       new ReduceAction348(163),
-                       new ReduceAction349(163),
-                       new ReduceAction350(163),
-                       new ReduceAction351(163),
-                       new ReduceAction352(163),
-                       new ReduceAction353(163),
-                       new ReduceAction354(163),
-                       new ReduceAction355(163),
-                       new ReduceAction356(163),
-                       new ReduceAction153(163),
-                       new ReduceAction830(164),
-                       new ReduceAction831(164),
-                       new ReduceAction150(165),
-                       new ReduceAction151(165),
-                       new ReduceAction152(165),
-                       new ReduceAction153(165),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction163(166),
-                       new ReduceAction164(166),
-                       new ReduceAction165(166),
-                       new ReduceAction166(166),
-                       new ReduceAction167(166),
-                       new ReduceAction168(166),
-                       new ReduceAction169(166),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction153(166),
-                       new ReduceAction177(166),
-                       new ReduceAction178(166),
-                       new ReduceAction179(166),
-                       new ReduceAction178(166),
-                       new ReduceAction181(166),
-                       new ReduceAction182(166),
-                       new ReduceAction183(166),
-                       new ReduceAction182(166),
-                       new ReduceAction185(166),
-                       new ReduceAction186(166),
-                       new ReduceAction187(166),
-                       new ReduceAction188(166),
-                       new ReduceAction189(166),
-                       new ReduceAction188(166),
-                       new ReduceAction191(166),
-                       new ReduceAction192(166),
-                       new ReduceAction191(166),
-                       new ReduceAction194(166),
-                       new ReduceAction247(167),
-                       new ReduceAction248(167),
-                       new ReduceAction249(168),
-                       new ReduceAction256(169),
-                       new ReduceAction257(169),
-                       new ReduceAction258(170),
-                       new ReduceAction259(170),
-                       new ReduceAction260(171),
-                       new ReduceAction261(171),
-                       new ReduceAction262(172),
-                       new ReduceAction263(172),
-                       new ReduceAction267(173),
-                       new ReduceAction268(173),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction163(174),
-                       new ReduceAction164(174),
-                       new ReduceAction165(174),
-                       new ReduceAction166(174),
-                       new ReduceAction167(174),
-                       new ReduceAction168(174),
-                       new ReduceAction169(174),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction153(174),
-                       new ReduceAction177(174),
-                       new ReduceAction178(174),
-                       new ReduceAction179(174),
-                       new ReduceAction178(174),
-                       new ReduceAction181(174),
-                       new ReduceAction182(174),
-                       new ReduceAction183(174),
-                       new ReduceAction182(174),
-                       new ReduceAction185(174),
-                       new ReduceAction186(174),
-                       new ReduceAction187(174),
-                       new ReduceAction188(174),
-                       new ReduceAction189(174),
-                       new ReduceAction188(174),
-                       new ReduceAction191(174),
-                       new ReduceAction192(174),
-                       new ReduceAction191(174),
-                       new ReduceAction194(174),
-                       new ReduceAction150(175),
-                       new ReduceAction151(175),
-                       new ReduceAction152(175),
-                       new ReduceAction150(176),
-                       new ReduceAction151(176),
-                       new ReduceAction152(176),
-                       new ReduceAction153(177),
-                       new ReduceAction153(177),
-                       new ReduceAction163(177),
-                       new ReduceAction164(177),
-                       new ReduceAction165(177),
-                       new ReduceAction166(177),
-                       new ReduceAction167(177),
-                       new ReduceAction168(177),
-                       new ReduceAction169(177),
-                       new ReduceAction153(177),
-                       new ReduceAction153(177),
-                       new ReduceAction153(177),
-                       new ReduceAction153(177),
-                       new ReduceAction153(177),
-                       new ReduceAction153(177),
-                       new ReduceAction194(177),
-                       new ReduceAction153(178),
-                       new ReduceAction153(178),
-                       new ReduceAction163(178),
-                       new ReduceAction164(178),
-                       new ReduceAction165(178),
-                       new ReduceAction166(178),
-                       new ReduceAction167(178),
-                       new ReduceAction168(178),
-                       new ReduceAction169(178),
-                       new ReduceAction153(178),
-                       new ReduceAction153(178),
-                       new ReduceAction153(178),
-                       new ReduceAction153(178),
-                       new ReduceAction153(178),
-                       new ReduceAction153(178),
-                       new ReduceAction194(178),
-                       new ReduceAction153(179),
-                       new ReduceAction153(179),
-                       new ReduceAction163(179),
-                       new ReduceAction164(179),
-                       new ReduceAction165(179),
-                       new ReduceAction166(179),
-                       new ReduceAction167(179),
-                       new ReduceAction168(179),
-                       new ReduceAction169(179),
-                       new ReduceAction153(179),
-                       new ReduceAction153(179),
-                       new ReduceAction153(179),
-                       new ReduceAction153(179),
-                       new ReduceAction153(179),
-                       new ReduceAction153(179),
-                       new ReduceAction194(179),
-                       new ReduceAction153(180),
-                       new ReduceAction153(180),
-                       new ReduceAction163(180),
-                       new ReduceAction164(180),
-                       new ReduceAction165(180),
-                       new ReduceAction166(180),
-                       new ReduceAction167(180),
-                       new ReduceAction168(180),
-                       new ReduceAction169(180),
-                       new ReduceAction153(180),
-                       new ReduceAction153(180),
-                       new ReduceAction153(180),
-                       new ReduceAction153(180),
-                       new ReduceAction153(180),
-                       new ReduceAction153(180),
-                       new ReduceAction194(180),
-                       new ReduceAction415(181),
-                       new ReduceAction417(181),
-                       new ReduceAction989(182),
-                       new ReduceAction990(182),
-                       new ReduceAction991(183),
-                       new ReduceAction992(183),
-                       new ReduceAction993(184),
-                       new ReduceAction994(184),
-                       new ReduceAction995(185),
-                       new ReduceAction996(185),
-                       new ReduceAction43(186),
-                       new ReduceAction998(186),
-                       new ReduceAction999(187),
-                       new ReduceAction1000(187),
-                       new ReduceAction1001(188),
-                       new ReduceAction1002(188),
-                       new ReduceAction144(189),
-                       new ReduceAction1004(189),
-                       new ReduceAction366(190),
-                       new ReduceAction1006(190),
-                       new ReduceAction366(191),
-                       new ReduceAction1006(191),
-                       new ReduceAction366(192),
-                       new ReduceAction1006(192),
-                       new ReduceAction430(193),
-                       new ReduceAction1012(193),
-                       new ReduceAction388(194),
-                       new ReduceAction1014(194),
-                       new ReduceAction388(195),
-                       new ReduceAction1014(195),
-                       new ReduceAction366(196),
-                       new ReduceAction1006(196),
-                       new ReduceAction366(197),
-                       new ReduceAction1006(197),
-                       new ReduceAction431(198),
-                       new ReduceAction1022(198),
-                       new ReduceAction1023(199),
-                       new ReduceAction1024(199),
-                       new ReduceAction1025(200),
-                       new ReduceAction1026(200)
+                       new ReduceAction159(129),
+                       new ReduceAction304(129),
+                       new ReduceAction159(130),
+                       new ReduceAction306(130),
+                       new ReduceAction159(131),
+                       new ReduceAction308(131),
+                       new ReduceAction309(131),
+                       new ReduceAction159(132),
+                       new ReduceAction311(132),
+                       new ReduceAction312(132),
+                       new ReduceAction159(133),
+                       new ReduceAction314(133),
+                       new ReduceAction315(133),
+                       new ReduceAction316(133),
+                       new ReduceAction159(134),
+                       new ReduceAction318(134),
+                       new ReduceAction159(135),
+                       new ReduceAction320(135),
+                       new ReduceAction321(135),
+                       new ReduceAction322(135),
+                       new ReduceAction323(135),
+                       new ReduceAction159(136),
+                       new ReduceAction325(136),
+                       new ReduceAction326(136),
+                       new ReduceAction327(136),
+                       new ReduceAction328(136),
+                       new ReduceAction159(137),
+                       new ReduceAction330(137),
+                       new ReduceAction331(137),
+                       new ReduceAction183(137),
+                       new ReduceAction187(137),
+                       new ReduceAction333(137),
+                       new ReduceAction341(137),
+                       new ReduceAction184(137),
+                       new ReduceAction188(137),
+                       new ReduceAction335(137),
+                       new ReduceAction343(137),
+                       new ReduceAction185(137),
+                       new ReduceAction189(137),
+                       new ReduceAction337(137),
+                       new ReduceAction345(137),
+                       new ReduceAction184(137),
+                       new ReduceAction188(137),
+                       new ReduceAction335(137),
+                       new ReduceAction343(137),
+                       new ReduceAction191(137),
+                       new ReduceAction349(137),
+                       new ReduceAction192(137),
+                       new ReduceAction193(137),
+                       new ReduceAction351(137),
+                       new ReduceAction353(137),
+                       new ReduceAction355(137),
+                       new ReduceAction356(137),
+                       new ReduceAction357(137),
+                       new ReduceAction358(137),
+                       new ReduceAction359(137),
+                       new ReduceAction360(137),
+                       new ReduceAction357(137),
+                       new ReduceAction358(137),
+                       new ReduceAction363(137),
+                       new ReduceAction364(137),
+                       new ReduceAction365(137),
+                       new ReduceAction159(138),
+                       new ReduceAction367(138),
+                       new ReduceAction368(138),
+                       new ReduceAction369(139),
+                       new ReduceAction370(139),
+                       new ReduceAction371(139),
+                       new ReduceAction372(139),
+                       new ReduceAction373(139),
+                       new ReduceAction374(139),
+                       new ReduceAction375(139),
+                       new ReduceAction376(139),
+                       new ReduceAction377(139),
+                       new ReduceAction159(139),
+                       new ReduceAction159(139),
+                       new ReduceAction146(140),
+                       new ReduceAction147(140),
+                       new ReduceAction148(140),
+                       new ReduceAction149(140),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction169(141),
+                       new ReduceAction170(141),
+                       new ReduceAction171(141),
+                       new ReduceAction172(141),
+                       new ReduceAction173(141),
+                       new ReduceAction174(141),
+                       new ReduceAction175(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction183(141),
+                       new ReduceAction184(141),
+                       new ReduceAction185(141),
+                       new ReduceAction184(141),
+                       new ReduceAction187(141),
+                       new ReduceAction188(141),
+                       new ReduceAction189(141),
+                       new ReduceAction188(141),
+                       new ReduceAction191(141),
+                       new ReduceAction192(141),
+                       new ReduceAction193(141),
+                       new ReduceAction194(141),
+                       new ReduceAction195(141),
+                       new ReduceAction194(141),
+                       new ReduceAction197(141),
+                       new ReduceAction198(141),
+                       new ReduceAction197(141),
+                       new ReduceAction200(141),
+                       new ReduceAction207(142),
+                       new ReduceAction208(142),
+                       new ReduceAction209(142),
+                       new ReduceAction210(142),
+                       new ReduceAction211(142),
+                       new ReduceAction212(142),
+                       new ReduceAction213(142),
+                       new ReduceAction214(142),
+                       new ReduceAction211(142),
+                       new ReduceAction212(142),
+                       new ReduceAction217(142),
+                       new ReduceAction218(142),
+                       new ReduceAction219(142),
+                       new ReduceAction220(142),
+                       new ReduceAction221(142),
+                       new ReduceAction222(142),
+                       new ReduceAction219(142),
+                       new ReduceAction220(142),
+                       new ReduceAction225(142),
+                       new ReduceAction226(142),
+                       new ReduceAction227(142),
+                       new ReduceAction228(142),
+                       new ReduceAction229(142),
+                       new ReduceAction230(142),
+                       new ReduceAction231(142),
+                       new ReduceAction232(142),
+                       new ReduceAction233(142),
+                       new ReduceAction230(142),
+                       new ReduceAction231(142),
+                       new ReduceAction236(142),
+                       new ReduceAction237(142),
+                       new ReduceAction238(142),
+                       new ReduceAction239(142),
+                       new ReduceAction240(142),
+                       new ReduceAction241(142),
+                       new ReduceAction238(142),
+                       new ReduceAction239(142),
+                       new ReduceAction244(142),
+                       new ReduceAction159(143),
+                       new ReduceAction284(143),
+                       new ReduceAction159(144),
+                       new ReduceAction286(144),
+                       new ReduceAction287(144),
+                       new ReduceAction288(144),
+                       new ReduceAction289(144),
+                       new ReduceAction159(145),
+                       new ReduceAction291(145),
+                       new ReduceAction159(146),
+                       new ReduceAction293(146),
+                       new ReduceAction294(146),
+                       new ReduceAction295(146),
+                       new ReduceAction296(146),
+                       new ReduceAction297(146),
+                       new ReduceAction298(146),
+                       new ReduceAction299(146),
+                       new ReduceAction300(146),
+                       new ReduceAction159(147),
+                       new ReduceAction302(147),
+                       new ReduceAction159(148),
+                       new ReduceAction304(148),
+                       new ReduceAction159(149),
+                       new ReduceAction306(149),
+                       new ReduceAction159(150),
+                       new ReduceAction308(150),
+                       new ReduceAction309(150),
+                       new ReduceAction159(151),
+                       new ReduceAction311(151),
+                       new ReduceAction312(151),
+                       new ReduceAction159(152),
+                       new ReduceAction314(152),
+                       new ReduceAction315(152),
+                       new ReduceAction316(152),
+                       new ReduceAction159(153),
+                       new ReduceAction318(153),
+                       new ReduceAction159(154),
+                       new ReduceAction320(154),
+                       new ReduceAction321(154),
+                       new ReduceAction322(154),
+                       new ReduceAction323(154),
+                       new ReduceAction159(155),
+                       new ReduceAction325(155),
+                       new ReduceAction326(155),
+                       new ReduceAction327(155),
+                       new ReduceAction328(155),
+                       new ReduceAction159(156),
+                       new ReduceAction330(156),
+                       new ReduceAction331(156),
+                       new ReduceAction183(156),
+                       new ReduceAction333(156),
+                       new ReduceAction184(156),
+                       new ReduceAction335(156),
+                       new ReduceAction185(156),
+                       new ReduceAction337(156),
+                       new ReduceAction184(156),
+                       new ReduceAction335(156),
+                       new ReduceAction187(156),
+                       new ReduceAction341(156),
+                       new ReduceAction188(156),
+                       new ReduceAction343(156),
+                       new ReduceAction189(156),
+                       new ReduceAction345(156),
+                       new ReduceAction188(156),
+                       new ReduceAction343(156),
+                       new ReduceAction191(156),
+                       new ReduceAction349(156),
+                       new ReduceAction192(156),
+                       new ReduceAction351(156),
+                       new ReduceAction193(156),
+                       new ReduceAction353(156),
+                       new ReduceAction354(156),
+                       new ReduceAction355(156),
+                       new ReduceAction356(156),
+                       new ReduceAction357(156),
+                       new ReduceAction358(156),
+                       new ReduceAction359(156),
+                       new ReduceAction360(156),
+                       new ReduceAction357(156),
+                       new ReduceAction358(156),
+                       new ReduceAction363(156),
+                       new ReduceAction364(156),
+                       new ReduceAction365(156),
+                       new ReduceAction159(157),
+                       new ReduceAction367(157),
+                       new ReduceAction368(157),
+                       new ReduceAction369(158),
+                       new ReduceAction370(158),
+                       new ReduceAction371(158),
+                       new ReduceAction372(158),
+                       new ReduceAction373(158),
+                       new ReduceAction374(158),
+                       new ReduceAction375(158),
+                       new ReduceAction376(158),
+                       new ReduceAction377(158),
+                       new ReduceAction159(158),
+                       new ReduceAction402(159),
+                       new ReduceAction403(159),
+                       new ReduceAction404(160),
+                       new ReduceAction22(160),
+                       new ReduceAction406(161),
+                       new ReduceAction406(162),
+                       new ReduceAction387(163),
+                       new ReduceAction388(163),
+                       new ReduceAction428(164),
+                       new ReduceAction159(164),
+                       new ReduceAction159(164),
+                       new ReduceAction431(164),
+                       new ReduceAction432(164),
+                       new ReduceAction146(165),
+                       new ReduceAction147(165),
+                       new ReduceAction159(166),
+                       new ReduceAction284(166),
+                       new ReduceAction159(167),
+                       new ReduceAction286(167),
+                       new ReduceAction287(167),
+                       new ReduceAction288(167),
+                       new ReduceAction289(167),
+                       new ReduceAction159(168),
+                       new ReduceAction291(168),
+                       new ReduceAction159(169),
+                       new ReduceAction293(169),
+                       new ReduceAction294(169),
+                       new ReduceAction295(169),
+                       new ReduceAction296(169),
+                       new ReduceAction297(169),
+                       new ReduceAction298(169),
+                       new ReduceAction299(169),
+                       new ReduceAction300(169),
+                       new ReduceAction159(170),
+                       new ReduceAction302(170),
+                       new ReduceAction159(171),
+                       new ReduceAction304(171),
+                       new ReduceAction159(172),
+                       new ReduceAction306(172),
+                       new ReduceAction159(173),
+                       new ReduceAction308(173),
+                       new ReduceAction309(173),
+                       new ReduceAction159(174),
+                       new ReduceAction311(174),
+                       new ReduceAction312(174),
+                       new ReduceAction159(175),
+                       new ReduceAction314(175),
+                       new ReduceAction315(175),
+                       new ReduceAction316(175),
+                       new ReduceAction159(176),
+                       new ReduceAction318(176),
+                       new ReduceAction159(177),
+                       new ReduceAction320(177),
+                       new ReduceAction321(177),
+                       new ReduceAction322(177),
+                       new ReduceAction323(177),
+                       new ReduceAction159(178),
+                       new ReduceAction325(178),
+                       new ReduceAction326(178),
+                       new ReduceAction853(178),
+                       new ReduceAction159(179),
+                       new ReduceAction855(179),
+                       new ReduceAction856(179),
+                       new ReduceAction857(179),
+                       new ReduceAction858(179),
+                       new ReduceAction859(179),
+                       new ReduceAction183(179),
+                       new ReduceAction333(179),
+                       new ReduceAction858(179),
+                       new ReduceAction859(179),
+                       new ReduceAction191(179),
+                       new ReduceAction349(179),
+                       new ReduceAction866(179),
+                       new ReduceAction867(179),
+                       new ReduceAction355(179),
+                       new ReduceAction356(179),
+                       new ReduceAction357(179),
+                       new ReduceAction358(179),
+                       new ReduceAction359(179),
+                       new ReduceAction360(179),
+                       new ReduceAction357(179),
+                       new ReduceAction358(179),
+                       new ReduceAction363(179),
+                       new ReduceAction364(179),
+                       new ReduceAction365(179),
+                       new ReduceAction159(180),
+                       new ReduceAction367(180),
+                       new ReduceAction368(180),
+                       new ReduceAction369(181),
+                       new ReduceAction370(181),
+                       new ReduceAction371(181),
+                       new ReduceAction372(181),
+                       new ReduceAction373(181),
+                       new ReduceAction374(181),
+                       new ReduceAction375(181),
+                       new ReduceAction376(181),
+                       new ReduceAction377(181),
+                       new ReduceAction159(181),
+                       new ReduceAction892(182),
+                       new ReduceAction893(182),
+                       new ReduceAction156(183),
+                       new ReduceAction157(183),
+                       new ReduceAction158(183),
+                       new ReduceAction159(183),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction169(184),
+                       new ReduceAction170(184),
+                       new ReduceAction171(184),
+                       new ReduceAction172(184),
+                       new ReduceAction173(184),
+                       new ReduceAction174(184),
+                       new ReduceAction175(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction183(184),
+                       new ReduceAction184(184),
+                       new ReduceAction185(184),
+                       new ReduceAction184(184),
+                       new ReduceAction187(184),
+                       new ReduceAction188(184),
+                       new ReduceAction189(184),
+                       new ReduceAction188(184),
+                       new ReduceAction191(184),
+                       new ReduceAction192(184),
+                       new ReduceAction193(184),
+                       new ReduceAction194(184),
+                       new ReduceAction195(184),
+                       new ReduceAction194(184),
+                       new ReduceAction197(184),
+                       new ReduceAction198(184),
+                       new ReduceAction197(184),
+                       new ReduceAction200(184),
+                       new ReduceAction256(185),
+                       new ReduceAction257(185),
+                       new ReduceAction258(186),
+                       new ReduceAction267(187),
+                       new ReduceAction268(187),
+                       new ReduceAction269(188),
+                       new ReduceAction270(188),
+                       new ReduceAction271(189),
+                       new ReduceAction272(189),
+                       new ReduceAction273(190),
+                       new ReduceAction274(190),
+                       new ReduceAction278(191),
+                       new ReduceAction279(191),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction169(192),
+                       new ReduceAction170(192),
+                       new ReduceAction171(192),
+                       new ReduceAction172(192),
+                       new ReduceAction173(192),
+                       new ReduceAction174(192),
+                       new ReduceAction175(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction183(192),
+                       new ReduceAction184(192),
+                       new ReduceAction185(192),
+                       new ReduceAction184(192),
+                       new ReduceAction187(192),
+                       new ReduceAction188(192),
+                       new ReduceAction189(192),
+                       new ReduceAction188(192),
+                       new ReduceAction191(192),
+                       new ReduceAction192(192),
+                       new ReduceAction193(192),
+                       new ReduceAction194(192),
+                       new ReduceAction195(192),
+                       new ReduceAction194(192),
+                       new ReduceAction197(192),
+                       new ReduceAction198(192),
+                       new ReduceAction197(192),
+                       new ReduceAction200(192),
+                       new ReduceAction156(193),
+                       new ReduceAction157(193),
+                       new ReduceAction158(193),
+                       new ReduceAction156(194),
+                       new ReduceAction157(194),
+                       new ReduceAction158(194),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction169(195),
+                       new ReduceAction170(195),
+                       new ReduceAction171(195),
+                       new ReduceAction172(195),
+                       new ReduceAction173(195),
+                       new ReduceAction174(195),
+                       new ReduceAction175(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction200(195),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction169(196),
+                       new ReduceAction170(196),
+                       new ReduceAction171(196),
+                       new ReduceAction172(196),
+                       new ReduceAction173(196),
+                       new ReduceAction174(196),
+                       new ReduceAction175(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction200(196),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction169(197),
+                       new ReduceAction170(197),
+                       new ReduceAction171(197),
+                       new ReduceAction172(197),
+                       new ReduceAction173(197),
+                       new ReduceAction174(197),
+                       new ReduceAction175(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction200(197),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction169(198),
+                       new ReduceAction170(198),
+                       new ReduceAction171(198),
+                       new ReduceAction172(198),
+                       new ReduceAction173(198),
+                       new ReduceAction174(198),
+                       new ReduceAction175(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction200(198),
+                       new ReduceAction434(199),
+                       new ReduceAction436(199),
+                       new ReduceAction474(200),
+                       new ReduceAction475(200),
+                       new ReduceAction23(200),
+                       new ReduceAction1054(201),
+                       new ReduceAction1055(201),
+                       new ReduceAction1056(202),
+                       new ReduceAction1057(202),
+                       new ReduceAction1058(203),
+                       new ReduceAction1059(203),
+                       new ReduceAction37(204),
+                       new ReduceAction1061(204),
+                       new ReduceAction45(205),
+                       new ReduceAction1063(205),
+                       new ReduceAction408(206),
+                       new ReduceAction1065(206),
+                       new ReduceAction1066(207),
+                       new ReduceAction1067(207),
+                       new ReduceAction1068(208),
+                       new ReduceAction1069(208),
+                       new ReduceAction150(209),
+                       new ReduceAction1071(209),
+                       new ReduceAction387(210),
+                       new ReduceAction1073(210),
+                       new ReduceAction387(211),
+                       new ReduceAction1073(211),
+                       new ReduceAction387(212),
+                       new ReduceAction1073(212),
+                       new ReduceAction448(213),
+                       new ReduceAction1079(213),
+                       new ReduceAction408(214),
+                       new ReduceAction1065(214),
+                       new ReduceAction387(215),
+                       new ReduceAction1073(215),
+                       new ReduceAction387(216),
+                       new ReduceAction1073(216),
+                       new ReduceAction449(217),
+                       new ReduceAction1087(217),
+                       new ReduceAction1088(218),
+                       new ReduceAction1089(218),
+                       new ReduceAction471(219),
+                       new ReduceAction490(219)
                )
        end
 end
@@ -1731,7 +1796,6 @@ private class ReduceAction26
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist9 = p.pop
                                        var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
@@ -1741,7 +1805,7 @@ private class ReduceAction26
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode8 = new Array[Object]
-                                       var listnode11 = new Array[Object]
+                                       var listnode12 = new Array[Object]
                                        var pdocnode2 = nodearraylist1
                                        assert pdocnode2 isa nullable ADoc
                                        var tkwredefnode3 = nodearraylist2
@@ -1752,24 +1816,23 @@ private class ReduceAction26
                                        assert pclasskindnode5 isa nullable AClasskind
                                        var tclassidnode6 = nodearraylist6
                                        assert tclassidnode6 isa nullable TClassid
-                                       var listnode7 = nodearraylist7
-                                       assert listnode7 isa Array[Object]
-                                       listnode8 = concat(listnode8, listnode7)
-                                       var listnode10 = nodearraylist8
-                                       assert listnode10 isa Array[Object]
-                                       listnode11 = concat(listnode11, listnode10)
-                                       var tkwendnode12 = nodearraylist9
-                                       assert tkwendnode12 isa nullable TKwend
+                                       var listnode11 = nodearraylist7
+                                       assert listnode11 isa Array[Object]
+                                       listnode12 = concat(listnode12, listnode11)
+                                       var tkwendnode13 = nodearraylist8
+                                       assert tkwendnode13 isa nullable TKwend
                                        var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
                                                pdocnode2,
                                                tkwredefnode3,
                                                pvisibilitynode4,
                                                pclasskindnode5,
                                                tclassidnode6,
+                                               null,
                                                listnode8,
                                                null,
-                                               listnode11,
-                                               tkwendnode12
+                                               null,
+                                               listnode12,
+                                               tkwendnode13
                                        )
                                        node_list = pclassdefnode1
                                        p.push(p.go_to(_goto), node_list)
@@ -1780,7 +1843,6 @@ private class ReduceAction27
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist10 = p.pop
                                        var nodearraylist9 = p.pop
                                        var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
@@ -1791,7 +1853,7 @@ private class ReduceAction27
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode8 = new Array[Object]
-                                       var listnode11 = new Array[Object]
+                                       var listnode12 = new Array[Object]
                                        var pdocnode2 = nodearraylist1
                                        assert pdocnode2 isa nullable ADoc
                                        var tkwredefnode3 = nodearraylist2
@@ -1802,26 +1864,83 @@ private class ReduceAction27
                                        assert pclasskindnode5 isa nullable AClasskind
                                        var tclassidnode6 = nodearraylist6
                                        assert tclassidnode6 isa nullable TClassid
-                                       var listnode7 = nodearraylist7
-                                       assert listnode7 isa Array[Object]
-                                       listnode8 = concat(listnode8, listnode7)
-                                       var pexterncodeblocknode9 = nodearraylist8
-                                       assert pexterncodeblocknode9 isa nullable AExternCodeBlock
-                                       var listnode10 = nodearraylist9
-                                       assert listnode10 isa Array[Object]
-                                       listnode11 = concat(listnode11, listnode10)
-                                       var tkwendnode12 = nodearraylist10
-                                       assert tkwendnode12 isa nullable TKwend
+                                       var pexterncodeblocknode10 = nodearraylist7
+                                       assert pexterncodeblocknode10 isa nullable AExternCodeBlock
+                                       var listnode11 = nodearraylist8
+                                       assert listnode11 isa Array[Object]
+                                       listnode12 = concat(listnode12, listnode11)
+                                       var tkwendnode13 = nodearraylist9
+                                       assert tkwendnode13 isa nullable TKwend
                                        var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
                                                pdocnode2,
                                                tkwredefnode3,
                                                pvisibilitynode4,
                                                pclasskindnode5,
                                                tclassidnode6,
+                                               null,
                                                listnode8,
-                                               pexterncodeblocknode9,
-                                               listnode11,
-                                               tkwendnode12
+                                               null,
+                                               pexterncodeblocknode10,
+                                               listnode12,
+                                               tkwendnode13
+                                       )
+                                       node_list = pclassdefnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction28
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist12 = p.pop
+                                       var nodearraylist11 = p.pop
+                                       var nodearraylist10 = p.pop
+                                       var nodearraylist9 = p.pop
+                                       var nodearraylist8 = p.pop
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var listnode9 = new Array[Object]
+                                       var listnode13 = new Array[Object]
+                                       var pdocnode2 = nodearraylist1
+                                       assert pdocnode2 isa nullable ADoc
+                                       var tkwredefnode3 = nodearraylist2
+                                       assert tkwredefnode3 isa nullable TKwredef
+                                       var pvisibilitynode4 = nodearraylist3
+                                       assert pvisibilitynode4 isa nullable AVisibility
+                                       var pclasskindnode5 = nodearraylist4
+                                       assert pclasskindnode5 isa nullable AClasskind
+                                       var tclassidnode6 = nodearraylist6
+                                       assert tclassidnode6 isa nullable TClassid
+                                       var tobranode7 = nodearraylist7
+                                       assert tobranode7 isa nullable TObra
+                                       var listnode8 = nodearraylist9
+                                       assert listnode8 isa Array[Object]
+                                       listnode9 = concat(listnode9, listnode8)
+                                       var tcbranode10 = nodearraylist10
+                                       assert tcbranode10 isa nullable TCbra
+                                       var listnode12 = nodearraylist11
+                                       assert listnode12 isa Array[Object]
+                                       listnode13 = concat(listnode13, listnode12)
+                                       var tkwendnode14 = nodearraylist12
+                                       assert tkwendnode14 isa nullable TKwend
+                                       var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
+                                               pdocnode2,
+                                               tkwredefnode3,
+                                               pvisibilitynode4,
+                                               pclasskindnode5,
+                                               tclassidnode6,
+                                               tobranode7,
+                                               listnode9,
+                                               tcbranode10,
+                                               null,
+                                               listnode13,
+                                               tkwendnode14
                                        )
                                        node_list = pclassdefnode1
                                        p.push(p.go_to(_goto), node_list)
@@ -1832,13 +1951,74 @@ private class ReduceAction29
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist13 = p.pop
+                                       var nodearraylist12 = p.pop
+                                       var nodearraylist11 = p.pop
+                                       var nodearraylist10 = p.pop
+                                       var nodearraylist9 = p.pop
+                                       var nodearraylist8 = p.pop
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var listnode9 = new Array[Object]
+                                       var listnode13 = new Array[Object]
+                                       var pdocnode2 = nodearraylist1
+                                       assert pdocnode2 isa nullable ADoc
+                                       var tkwredefnode3 = nodearraylist2
+                                       assert tkwredefnode3 isa nullable TKwredef
+                                       var pvisibilitynode4 = nodearraylist3
+                                       assert pvisibilitynode4 isa nullable AVisibility
+                                       var pclasskindnode5 = nodearraylist4
+                                       assert pclasskindnode5 isa nullable AClasskind
+                                       var tclassidnode6 = nodearraylist6
+                                       assert tclassidnode6 isa nullable TClassid
+                                       var tobranode7 = nodearraylist7
+                                       assert tobranode7 isa nullable TObra
+                                       var listnode8 = nodearraylist9
+                                       assert listnode8 isa Array[Object]
+                                       listnode9 = concat(listnode9, listnode8)
+                                       var tcbranode10 = nodearraylist10
+                                       assert tcbranode10 isa nullable TCbra
+                                       var pexterncodeblocknode11 = nodearraylist11
+                                       assert pexterncodeblocknode11 isa nullable AExternCodeBlock
+                                       var listnode12 = nodearraylist12
+                                       assert listnode12 isa Array[Object]
+                                       listnode13 = concat(listnode13, listnode12)
+                                       var tkwendnode14 = nodearraylist13
+                                       assert tkwendnode14 isa nullable TKwend
+                                       var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
+                                               pdocnode2,
+                                               tkwredefnode3,
+                                               pvisibilitynode4,
+                                               pclasskindnode5,
+                                               tclassidnode6,
+                                               tobranode7,
+                                               listnode9,
+                                               tcbranode10,
+                                               pexterncodeblocknode11,
+                                               listnode13,
+                                               tkwendnode14
+                                       )
+                                       node_list = pclassdefnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction31
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
                                        var nodearraylist1 = p.pop
                                        var tkwredefnode1 = nodearraylist1
                                        node_list = tkwredefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction30
+private class ReduceAction32
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1853,7 +2033,7 @@ private class ReduceAction30
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction31
+private class ReduceAction33
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1872,7 +2052,7 @@ private class ReduceAction31
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction32
+private class ReduceAction34
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1887,7 +2067,7 @@ private class ReduceAction32
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction33
+private class ReduceAction35
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1902,7 +2082,7 @@ private class ReduceAction33
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction34
+private class ReduceAction36
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1921,18 +2101,14 @@ private class ReduceAction34
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction35
+private class ReduceAction37
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist5 = p.pop
-                                       var nodearraylist4 = p.pop
-                                       var nodearraylist3 = p.pop
-                                       var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode2 = new Array[Object]
-                                       var pformaldefnode1 = nodearraylist3
+                                       var pformaldefnode1 = nodearraylist1
                                        if pformaldefnode1 != null then
                                                listnode2.add(pformaldefnode1)
                                        end
@@ -1940,20 +2116,16 @@ private class ReduceAction35
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction36
+private class ReduceAction38
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist6 = p.pop
-                                       var nodearraylist5 = p.pop
-                                       var nodearraylist4 = p.pop
-                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode3 = new Array[Object]
-                                       var pformaldefnode1 = nodearraylist3
-                                       var listnode2 = nodearraylist4
+                                       var pformaldefnode1 = nodearraylist1
+                                       var listnode2 = nodearraylist2
                                        assert listnode2 isa Array[Object]
                                        if pformaldefnode1 != null then
                                                listnode3.add(pformaldefnode1)
@@ -1963,7 +2135,7 @@ private class ReduceAction36
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction37
+private class ReduceAction39
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1973,7 +2145,7 @@ private class ReduceAction37
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction38
+private class ReduceAction40
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1986,11 +2158,12 @@ private class ReduceAction38
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction39
+private class ReduceAction41
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var tclassidnode2 = nodearraylist1
@@ -2006,11 +2179,12 @@ private class ReduceAction39
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction40
+private class ReduceAction42
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
@@ -2029,7 +2203,7 @@ private class ReduceAction40
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction41
+private class ReduceAction43
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2065,7 +2239,7 @@ private class ReduceAction41
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction42
+private class ReduceAction44
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2080,7 +2254,7 @@ private class ReduceAction42
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction43
+private class ReduceAction45
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2095,7 +2269,7 @@ private class ReduceAction43
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction44
+private class ReduceAction46
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2106,7 +2280,7 @@ private class ReduceAction44
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction45
+private class ReduceAction47
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2118,7 +2292,7 @@ private class ReduceAction45
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction46
+private class ReduceAction48
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2144,8 +2318,12 @@ private class ReduceAction46
                                        assert pmethidnode8 isa nullable AMethid
                                        var psignaturenode9 = nodearraylist6
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2158,13 +2336,15 @@ private class ReduceAction46
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction47
+private class ReduceAction49
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2193,8 +2373,12 @@ private class ReduceAction47
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist7
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist9
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist8
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist9
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist10
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2207,13 +2391,15 @@ private class ReduceAction47
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction48
+private class ReduceAction50
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2251,13 +2437,15 @@ private class ReduceAction48
                                                pannotationsnode10,
                                                null,
                                                null,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction49
+private class ReduceAction51
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2292,13 +2480,15 @@ private class ReduceAction49
                                                pannotationsnode10,
                                                null,
                                                null,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction50
+private class ReduceAction52
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2336,13 +2526,15 @@ private class ReduceAction50
                                                pannotationsnode10,
                                                null,
                                                null,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction51
+private class ReduceAction53
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2365,8 +2557,12 @@ private class ReduceAction51
                                        assert tkwnewnode7 isa nullable TKwnew
                                        var psignaturenode9 = nodearraylist5
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist7
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist6
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist7
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist8
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2379,13 +2575,15 @@ private class ReduceAction51
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction52
+private class ReduceAction54
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2411,8 +2609,12 @@ private class ReduceAction52
                                        assert pmethidnode8 isa nullable AMethid
                                        var psignaturenode9 = nodearraylist6
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2425,13 +2627,15 @@ private class ReduceAction52
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction53
+private class ReduceAction55
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2457,8 +2661,12 @@ private class ReduceAction53
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist6
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2471,13 +2679,15 @@ private class ReduceAction53
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction54
+private class ReduceAction56
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2506,8 +2716,12 @@ private class ReduceAction54
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist7
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist9
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist8
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist9
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist10
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2520,13 +2734,15 @@ private class ReduceAction54
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction55
+private class ReduceAction57
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2567,13 +2783,15 @@ private class ReduceAction55
                                                null,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction56
+private class ReduceAction58
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2617,13 +2835,15 @@ private class ReduceAction56
                                                pannotationsnode10,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction57
+private class ReduceAction59
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2647,8 +2867,8 @@ private class ReduceAction57
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pannotationsnode9 = nodearraylist7
-                                       assert pannotationsnode9 isa nullable AAnnotations
+                                       var pannotationsnode10 = nodearraylist7
+                                       assert pannotationsnode10 isa nullable AAnnotations
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2657,14 +2877,17 @@ private class ReduceAction57
                                                tidnode6,
                                                ptypenode7,
                                                null,
-                                               pannotationsnode9,
+                                               null,
+                                               pannotationsnode10,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction58
+private class ReduceAction60
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2691,10 +2914,12 @@ private class ReduceAction58
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pexprnode8 = nodearraylist9
-                                       assert pexprnode8 isa nullable AExpr
-                                       var pannotationsnode9 = nodearraylist10
-                                       assert pannotationsnode9 isa nullable AAnnotations
+                                       var tassignnode8 = nodearraylist7
+                                       assert tassignnode8 isa nullable TAssign
+                                       var pexprnode9 = nodearraylist9
+                                       assert pexprnode9 isa nullable AExpr
+                                       var pannotationsnode10 = nodearraylist10
+                                       assert pannotationsnode10 isa nullable AAnnotations
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2702,15 +2927,18 @@ private class ReduceAction58
                                                tkwvarnode5,
                                                tidnode6,
                                                ptypenode7,
-                                               pexprnode8,
-                                               pannotationsnode9,
+                                               tassignnode8,
+                                               pexprnode9,
+                                               pannotationsnode10,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction59
+private class ReduceAction61
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2735,8 +2963,10 @@ private class ReduceAction59
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pexprnode10 = nodearraylist8
-                                       assert pexprnode10 isa nullable AExpr
+                                       var tkwdonode11 = nodearraylist7
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist8
+                                       assert pexprnode12 isa nullable AExpr
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2746,13 +2976,16 @@ private class ReduceAction59
                                                ptypenode7,
                                                null,
                                                null,
-                                               pexprnode10
+                                               null,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction60
+private class ReduceAction62
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2778,10 +3011,12 @@ private class ReduceAction60
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pannotationsnode9 = nodearraylist7
-                                       assert pannotationsnode9 isa nullable AAnnotations
-                                       var pexprnode10 = nodearraylist9
-                                       assert pexprnode10 isa nullable AExpr
+                                       var pannotationsnode10 = nodearraylist7
+                                       assert pannotationsnode10 isa nullable AAnnotations
+                                       var tkwdonode11 = nodearraylist8
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist9
+                                       assert pexprnode12 isa nullable AExpr
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2790,14 +3025,17 @@ private class ReduceAction60
                                                tidnode6,
                                                ptypenode7,
                                                null,
-                                               pannotationsnode9,
-                                               pexprnode10
+                                               null,
+                                               pannotationsnode10,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction61
+private class ReduceAction63
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2823,8 +3061,12 @@ private class ReduceAction61
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pexprnode10 = nodearraylist8
-                                       assert pexprnode10 isa nullable AExpr
+                                       var tkwdonode11 = nodearraylist7
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist8
+                                       assert pexprnode12 isa nullable AExpr
+                                       var tkwendnode13 = nodearraylist9
+                                       assert tkwendnode13 isa nullable TKwend
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2834,13 +3076,16 @@ private class ReduceAction61
                                                ptypenode7,
                                                null,
                                                null,
-                                               pexprnode10
+                                               null,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               tkwendnode13
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction62
+private class ReduceAction64
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2867,10 +3112,14 @@ private class ReduceAction62
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pannotationsnode9 = nodearraylist7
-                                       assert pannotationsnode9 isa nullable AAnnotations
-                                       var pexprnode10 = nodearraylist9
-                                       assert pexprnode10 isa nullable AExpr
+                                       var pannotationsnode10 = nodearraylist7
+                                       assert pannotationsnode10 isa nullable AAnnotations
+                                       var tkwdonode11 = nodearraylist8
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist9
+                                       assert pexprnode12 isa nullable AExpr
+                                       var tkwendnode13 = nodearraylist10
+                                       assert tkwendnode13 isa nullable TKwend
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2879,14 +3128,17 @@ private class ReduceAction62
                                                tidnode6,
                                                ptypenode7,
                                                null,
-                                               pannotationsnode9,
-                                               pexprnode10
+                                               null,
+                                               pannotationsnode10,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               tkwendnode13
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction63
+private class ReduceAction65
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2909,8 +3161,12 @@ private class ReduceAction63
                                        assert tkwinitnode6 isa nullable TKwinit
                                        var psignaturenode9 = nodearraylist5
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist7
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist6
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist7
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist8
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2923,13 +3179,15 @@ private class ReduceAction63
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction64
+private class ReduceAction66
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2955,8 +3213,12 @@ private class ReduceAction64
                                        assert pmethidnode8 isa nullable AMethid
                                        var psignaturenode9 = nodearraylist6
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2969,13 +3231,15 @@ private class ReduceAction64
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction65
+private class ReduceAction67
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3001,8 +3265,12 @@ private class ReduceAction65
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist6
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -3015,13 +3283,15 @@ private class ReduceAction65
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction66
+private class ReduceAction68
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3050,8 +3320,12 @@ private class ReduceAction66
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist7
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist9
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist8
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist9
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist10
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -3064,13 +3338,15 @@ private class ReduceAction66
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction67
+private class ReduceAction69
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3109,7 +3385,7 @@ private class ReduceAction67
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction68
+private class ReduceAction70
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3147,13 +3423,15 @@ private class ReduceAction68
                                                null,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction69
+private class ReduceAction71
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3194,13 +3472,15 @@ private class ReduceAction69
                                                null,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction70
+private class ReduceAction72
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3241,13 +3521,15 @@ private class ReduceAction70
                                                pannotationsnode10,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction71
+private class ReduceAction73
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3291,13 +3573,15 @@ private class ReduceAction71
                                                pannotationsnode10,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction72
+private class ReduceAction74
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3308,19 +3592,32 @@ private class ReduceAction72
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction74
+private class ReduceAction76
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pannotationsnode1 = nodearraylist2
-                                       node_list = pannotationsnode1
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction75
+                                       var listnode6 = new Array[Object]
+                                       var tkwisnode2 = nodearraylist1
+                                       assert tkwisnode2 isa nullable TKwis
+                                       var listnode5 = nodearraylist2
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
+                                               tkwisnode2,
+                                               null,
+                                               null,
+                                               listnode6,
+                                               null,
+                                               null
+                                       )
+                                       node_list = pannotationsnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction77
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3329,12 +3626,27 @@ private class ReduceAction75
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pannotationsnode1 = nodearraylist3
+                                       var listnode6 = new Array[Object]
+                                       var tkwisnode2 = nodearraylist1
+                                       assert tkwisnode2 isa nullable TKwis
+                                       var listnode5 = nodearraylist3
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tkwendnode8 = nodearraylist4
+                                       assert tkwendnode8 isa nullable TKwend
+                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
+                                               tkwisnode2,
+                                               null,
+                                               null,
+                                               listnode6,
+                                               null,
+                                               tkwendnode8
+                                       )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction78
+private class ReduceAction80
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3342,12 +3654,25 @@ private class ReduceAction78
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pannotationsnode1 = nodearraylist3
+                                       var listnode6 = new Array[Object]
+                                       var tkwisnode2 = nodearraylist1
+                                       assert tkwisnode2 isa nullable TKwis
+                                       var listnode5 = nodearraylist3
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
+                                               tkwisnode2,
+                                               null,
+                                               null,
+                                               listnode6,
+                                               null,
+                                               null
+                                       )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction79
+private class ReduceAction81
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3359,7 +3684,7 @@ private class ReduceAction79
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction80
+private class ReduceAction82
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3375,7 +3700,7 @@ private class ReduceAction80
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction81
+private class ReduceAction83
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3391,7 +3716,7 @@ private class ReduceAction81
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction82
+private class ReduceAction84
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3407,7 +3732,7 @@ private class ReduceAction82
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction83
+private class ReduceAction85
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3423,7 +3748,7 @@ private class ReduceAction83
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction84
+private class ReduceAction86
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3438,7 +3763,7 @@ private class ReduceAction84
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction85
+private class ReduceAction87
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3453,7 +3778,7 @@ private class ReduceAction85
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction86
+private class ReduceAction88
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3468,7 +3793,7 @@ private class ReduceAction86
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction87
+private class ReduceAction89
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3483,7 +3808,7 @@ private class ReduceAction87
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction88
+private class ReduceAction90
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3498,7 +3823,7 @@ private class ReduceAction88
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction89
+private class ReduceAction91
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3513,7 +3838,67 @@ private class ReduceAction89
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction90
+private class ReduceAction92
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var tpipenode2 = nodearraylist1
+                                       assert tpipenode2 isa nullable TPipe
+                                       var pmethidnode1: nullable APipeMethid = new APipeMethid.init_apipemethid(
+                                               tpipenode2
+                                       )
+                                       node_list = pmethidnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction93
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var tcaretnode2 = nodearraylist1
+                                       assert tcaretnode2 isa nullable TCaret
+                                       var pmethidnode1: nullable ACaretMethid = new ACaretMethid.init_acaretmethid(
+                                               tcaretnode2
+                                       )
+                                       node_list = pmethidnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction94
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var tampnode2 = nodearraylist1
+                                       assert tampnode2 isa nullable TAmp
+                                       var pmethidnode1: nullable AAmpMethid = new AAmpMethid.init_aampmethid(
+                                               tampnode2
+                                       )
+                                       node_list = pmethidnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction95
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var ttildenode2 = nodearraylist1
+                                       assert ttildenode2 isa nullable TTilde
+                                       var pmethidnode1: nullable ATildeMethid = new ATildeMethid.init_atildemethid(
+                                               ttildenode2
+                                       )
+                                       node_list = pmethidnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction96
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3528,7 +3913,7 @@ private class ReduceAction90
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction91
+private class ReduceAction97
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3543,7 +3928,7 @@ private class ReduceAction91
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction92
+private class ReduceAction98
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3558,7 +3943,7 @@ private class ReduceAction92
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction93
+private class ReduceAction99
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3573,7 +3958,7 @@ private class ReduceAction93
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction94
+private class ReduceAction100
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3588,7 +3973,7 @@ private class ReduceAction94
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction95
+private class ReduceAction101
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3603,7 +3988,7 @@ private class ReduceAction95
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction96
+private class ReduceAction102
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3618,7 +4003,7 @@ private class ReduceAction96
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction97
+private class ReduceAction103
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3633,7 +4018,7 @@ private class ReduceAction97
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction98
+private class ReduceAction104
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3652,7 +4037,7 @@ private class ReduceAction98
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction99
+private class ReduceAction105
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3667,7 +4052,7 @@ private class ReduceAction99
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction100
+private class ReduceAction106
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3686,7 +4071,7 @@ private class ReduceAction100
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction101
+private class ReduceAction107
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3709,7 +4094,7 @@ private class ReduceAction101
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction102
+private class ReduceAction108
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3724,7 +4109,7 @@ private class ReduceAction102
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction103
+private class ReduceAction109
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3755,7 +4140,7 @@ private class ReduceAction103
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction104
+private class ReduceAction110
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3783,7 +4168,7 @@ private class ReduceAction104
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction105
+private class ReduceAction111
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3803,7 +4188,7 @@ private class ReduceAction105
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction106
+private class ReduceAction112
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3820,7 +4205,7 @@ private class ReduceAction106
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction107
+private class ReduceAction113
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3836,7 +4221,7 @@ private class ReduceAction107
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction108
+private class ReduceAction114
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3856,7 +4241,7 @@ private class ReduceAction108
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction110
+private class ReduceAction116
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3869,7 +4254,7 @@ private class ReduceAction110
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction111
+private class ReduceAction117
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3890,7 +4275,7 @@ private class ReduceAction111
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction112
+private class ReduceAction118
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3911,7 +4296,7 @@ private class ReduceAction112
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction113
+private class ReduceAction119
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3935,7 +4320,7 @@ private class ReduceAction113
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction114
+private class ReduceAction120
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3959,7 +4344,7 @@ private class ReduceAction114
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction115
+private class ReduceAction121
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3986,7 +4371,7 @@ private class ReduceAction115
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction116
+private class ReduceAction122
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4010,7 +4395,7 @@ private class ReduceAction116
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction117
+private class ReduceAction123
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4038,7 +4423,7 @@ private class ReduceAction117
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction119
+private class ReduceAction125
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4051,7 +4436,7 @@ private class ReduceAction119
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction120
+private class ReduceAction126
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4062,7 +4447,7 @@ private class ReduceAction120
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction122
+private class ReduceAction128
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4077,7 +4462,7 @@ private class ReduceAction122
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction123
+private class ReduceAction129
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4092,7 +4477,7 @@ private class ReduceAction123
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction124
+private class ReduceAction130
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4115,7 +4500,7 @@ private class ReduceAction124
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction125
+private class ReduceAction131
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4130,7 +4515,7 @@ private class ReduceAction125
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction126
+private class ReduceAction132
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4162,7 +4547,7 @@ private class ReduceAction126
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction127
+private class ReduceAction133
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4190,7 +4575,7 @@ private class ReduceAction127
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction128
+private class ReduceAction134
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4219,7 +4604,7 @@ private class ReduceAction128
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction129
+private class ReduceAction135
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4244,7 +4629,7 @@ private class ReduceAction129
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction130
+private class ReduceAction136
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4278,7 +4663,7 @@ private class ReduceAction130
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction131
+private class ReduceAction137
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4308,7 +4693,7 @@ private class ReduceAction131
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction133
+private class ReduceAction139
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4319,7 +4704,7 @@ private class ReduceAction133
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction134
+private class ReduceAction140
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4340,7 +4725,7 @@ private class ReduceAction134
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction135
+private class ReduceAction141
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4356,7 +4741,7 @@ private class ReduceAction135
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction136
+private class ReduceAction142
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4375,7 +4760,7 @@ private class ReduceAction136
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction137
+private class ReduceAction143
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4386,7 +4771,7 @@ private class ReduceAction137
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction139
+private class ReduceAction145
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4398,29 +4783,31 @@ private class ReduceAction139
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction140
+private class ReduceAction146
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode4 = new Array[Object]
+                                       var listnode5 = new Array[Object]
                                        var tclassidnode3 = nodearraylist1
                                        assert tclassidnode3 isa nullable TClassid
-                                       var pannotationsnode5 = nodearraylist2
-                                       assert pannotationsnode5 isa nullable AAnnotations
+                                       var pannotationsnode7 = nodearraylist2
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                null,
                                                tclassidnode3,
-                                               listnode4,
-                                               pannotationsnode5
+                                               null,
+                                               listnode5,
+                                               null,
+                                               pannotationsnode7
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction141
+private class ReduceAction147
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4428,24 +4815,26 @@ private class ReduceAction141
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode4 = new Array[Object]
+                                       var listnode5 = new Array[Object]
                                        var tkwnullablenode2 = nodearraylist1
                                        assert tkwnullablenode2 isa nullable TKwnullable
                                        var tclassidnode3 = nodearraylist2
                                        assert tclassidnode3 isa nullable TClassid
-                                       var pannotationsnode5 = nodearraylist3
-                                       assert pannotationsnode5 isa nullable AAnnotations
+                                       var pannotationsnode7 = nodearraylist3
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                tkwnullablenode2,
                                                tclassidnode3,
-                                               listnode4,
-                                               pannotationsnode5
+                                               null,
+                                               listnode5,
+                                               null,
+                                               pannotationsnode7
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction142
+private class ReduceAction148
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4457,25 +4846,31 @@ private class ReduceAction142
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
+                                       var listnode6 = new Array[Object]
                                        var tclassidnode3 = nodearraylist1
                                        assert tclassidnode3 isa nullable TClassid
-                                       var listnode4 = nodearraylist4
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var pannotationsnode6 = nodearraylist7
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tobranode4 = nodearraylist2
+                                       assert tobranode4 isa nullable TObra
+                                       var listnode5 = nodearraylist4
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tcbranode7 = nodearraylist6
+                                       assert tcbranode7 isa nullable TCbra
+                                       var pannotationsnode8 = nodearraylist7
+                                       assert pannotationsnode8 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                null,
                                                tclassidnode3,
-                                               listnode5,
-                                               pannotationsnode6
+                                               tobranode4,
+                                               listnode6,
+                                               tcbranode7,
+                                               pannotationsnode8
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction143
+private class ReduceAction149
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4488,27 +4883,33 @@ private class ReduceAction143
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
+                                       var listnode6 = new Array[Object]
                                        var tkwnullablenode2 = nodearraylist1
                                        assert tkwnullablenode2 isa nullable TKwnullable
                                        var tclassidnode3 = nodearraylist2
                                        assert tclassidnode3 isa nullable TClassid
-                                       var listnode4 = nodearraylist5
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var pannotationsnode6 = nodearraylist8
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tobranode4 = nodearraylist3
+                                       assert tobranode4 isa nullable TObra
+                                       var listnode5 = nodearraylist5
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tcbranode7 = nodearraylist7
+                                       assert tcbranode7 isa nullable TCbra
+                                       var pannotationsnode8 = nodearraylist8
+                                       assert pannotationsnode8 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                tkwnullablenode2,
                                                tclassidnode3,
-                                               listnode5,
-                                               pannotationsnode6
+                                               tobranode4,
+                                               listnode6,
+                                               tcbranode7,
+                                               pannotationsnode8
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction144
+private class ReduceAction150
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4523,7 +4924,7 @@ private class ReduceAction144
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction145
+private class ReduceAction151
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4542,7 +4943,7 @@ private class ReduceAction145
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction146
+private class ReduceAction152
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4555,7 +4956,7 @@ private class ReduceAction146
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction150
+private class ReduceAction156
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4567,7 +4968,7 @@ private class ReduceAction150
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction151
+private class ReduceAction157
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4585,7 +4986,7 @@ private class ReduceAction151
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction152
+private class ReduceAction158
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4602,7 +5003,7 @@ private class ReduceAction152
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction153
+private class ReduceAction159
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4613,7 +5014,7 @@ private class ReduceAction153
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction154
+private class ReduceAction160
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4633,7 +5034,7 @@ private class ReduceAction154
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction155
+private class ReduceAction161
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4657,7 +5058,7 @@ private class ReduceAction155
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction156
+private class ReduceAction162
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4678,7 +5079,7 @@ private class ReduceAction156
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction157
+private class ReduceAction163
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4703,7 +5104,7 @@ private class ReduceAction157
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction158
+private class ReduceAction164
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4727,7 +5128,7 @@ private class ReduceAction158
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction159
+private class ReduceAction165
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4755,7 +5156,7 @@ private class ReduceAction159
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction163
+private class ReduceAction169
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4771,7 +5172,7 @@ private class ReduceAction163
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction164
+private class ReduceAction170
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4790,7 +5191,7 @@ private class ReduceAction164
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction165
+private class ReduceAction171
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4806,7 +5207,7 @@ private class ReduceAction165
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction166
+private class ReduceAction172
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4825,7 +5226,7 @@ private class ReduceAction166
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction167
+private class ReduceAction173
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4840,7 +5241,7 @@ private class ReduceAction167
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction168
+private class ReduceAction174
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4856,7 +5257,7 @@ private class ReduceAction168
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction169
+private class ReduceAction175
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4875,7 +5276,7 @@ private class ReduceAction169
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction177
+private class ReduceAction183
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4900,7 +5301,7 @@ private class ReduceAction177
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction178
+private class ReduceAction184
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4926,7 +5327,7 @@ private class ReduceAction178
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction179
+private class ReduceAction185
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4953,7 +5354,7 @@ private class ReduceAction179
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction181
+private class ReduceAction187
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4974,7 +5375,7 @@ private class ReduceAction181
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction182
+private class ReduceAction188
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4996,7 +5397,7 @@ private class ReduceAction182
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction183
+private class ReduceAction189
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5019,7 +5420,7 @@ private class ReduceAction183
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction185
+private class ReduceAction191
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5042,7 +5443,7 @@ private class ReduceAction185
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction186
+private class ReduceAction192
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5067,7 +5468,7 @@ private class ReduceAction186
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction187
+private class ReduceAction193
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5088,7 +5489,7 @@ private class ReduceAction187
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction188
+private class ReduceAction194
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5114,7 +5515,7 @@ private class ReduceAction188
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction189
+private class ReduceAction195
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5141,7 +5542,7 @@ private class ReduceAction189
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction191
+private class ReduceAction197
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5163,7 +5564,7 @@ private class ReduceAction191
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction192
+private class ReduceAction198
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5186,7 +5587,7 @@ private class ReduceAction192
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction194
+private class ReduceAction200
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5214,7 +5615,7 @@ private class ReduceAction194
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction195
+private class ReduceAction201
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5230,7 +5631,7 @@ private class ReduceAction195
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction196
+private class ReduceAction202
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5249,7 +5650,7 @@ private class ReduceAction196
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction197
+private class ReduceAction203
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5275,7 +5676,7 @@ private class ReduceAction197
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction198
+private class ReduceAction204
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5304,7 +5705,7 @@ private class ReduceAction198
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction199
+private class ReduceAction205
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5337,7 +5738,7 @@ private class ReduceAction199
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction200
+private class ReduceAction206
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5373,7 +5774,7 @@ private class ReduceAction200
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction201
+private class ReduceAction207
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5403,7 +5804,7 @@ private class ReduceAction201
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction202
+private class ReduceAction208
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5429,7 +5830,7 @@ private class ReduceAction202
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction203
+private class ReduceAction209
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5462,7 +5863,7 @@ private class ReduceAction203
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction204
+private class ReduceAction210
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5496,7 +5897,7 @@ private class ReduceAction204
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction205
+private class ReduceAction211
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5530,7 +5931,7 @@ private class ReduceAction205
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction206
+private class ReduceAction212
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5565,7 +5966,7 @@ private class ReduceAction206
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction207
+private class ReduceAction213
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5600,7 +6001,7 @@ private class ReduceAction207
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction208
+private class ReduceAction214
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5636,7 +6037,7 @@ private class ReduceAction208
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction211
+private class ReduceAction217
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5665,7 +6066,7 @@ private class ReduceAction211
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction212
+private class ReduceAction218
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5695,7 +6096,7 @@ private class ReduceAction212
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction213
+private class ReduceAction219
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5725,7 +6126,7 @@ private class ReduceAction213
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction214
+private class ReduceAction220
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5756,7 +6157,7 @@ private class ReduceAction214
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction215
+private class ReduceAction221
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5787,7 +6188,7 @@ private class ReduceAction215
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction216
+private class ReduceAction222
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5819,7 +6220,7 @@ private class ReduceAction216
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction219
+private class ReduceAction225
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5846,7 +6247,7 @@ private class ReduceAction219
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction220
+private class ReduceAction226
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5876,7 +6277,7 @@ private class ReduceAction220
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction221
+private class ReduceAction227
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5902,7 +6303,7 @@ private class ReduceAction221
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction222
+private class ReduceAction228
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5935,7 +6336,7 @@ private class ReduceAction222
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction223
+private class ReduceAction229
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5969,7 +6370,7 @@ private class ReduceAction223
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction224
+private class ReduceAction230
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6003,7 +6404,7 @@ private class ReduceAction224
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction225
+private class ReduceAction231
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6038,7 +6439,7 @@ private class ReduceAction225
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction226
+private class ReduceAction232
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6073,7 +6474,7 @@ private class ReduceAction226
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction227
+private class ReduceAction233
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6109,7 +6510,7 @@ private class ReduceAction227
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction230
+private class ReduceAction236
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6138,7 +6539,7 @@ private class ReduceAction230
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction231
+private class ReduceAction237
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6168,7 +6569,7 @@ private class ReduceAction231
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction232
+private class ReduceAction238
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6198,7 +6599,7 @@ private class ReduceAction232
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction233
+private class ReduceAction239
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6229,7 +6630,7 @@ private class ReduceAction233
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction234
+private class ReduceAction240
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6260,7 +6661,7 @@ private class ReduceAction234
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction235
+private class ReduceAction241
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6292,7 +6693,7 @@ private class ReduceAction235
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction238
+private class ReduceAction244
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6319,7 +6720,7 @@ private class ReduceAction238
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction239
+private class ReduceAction245
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6334,7 +6735,7 @@ private class ReduceAction239
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction240
+private class ReduceAction246
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6349,7 +6750,7 @@ private class ReduceAction240
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction241
+private class ReduceAction247
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6364,7 +6765,7 @@ private class ReduceAction241
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction242
+private class ReduceAction248
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6379,7 +6780,7 @@ private class ReduceAction242
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction243
+private class ReduceAction249
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6394,7 +6795,7 @@ private class ReduceAction243
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction244
+private class ReduceAction250
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6409,7 +6810,52 @@ private class ReduceAction244
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction245
+private class ReduceAction251
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var tpipeeqnode2 = nodearraylist1
+                                       assert tpipeeqnode2 isa nullable TPipeeq
+                                       var passignopnode1: nullable APipeAssignOp = new APipeAssignOp.init_apipeassignop(
+                                               tpipeeqnode2
+                                       )
+                                       node_list = passignopnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction252
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var tcareteqnode2 = nodearraylist1
+                                       assert tcareteqnode2 isa nullable TCareteq
+                                       var passignopnode1: nullable ACaretAssignOp = new ACaretAssignOp.init_acaretassignop(
+                                               tcareteqnode2
+                                       )
+                                       node_list = passignopnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction253
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var tampeqnode2 = nodearraylist1
+                                       assert tampeqnode2 isa nullable TAmpeq
+                                       var passignopnode1: nullable AAmpAssignOp = new AAmpAssignOp.init_aampassignop(
+                                               tampeqnode2
+                                       )
+                                       node_list = passignopnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction254
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6424,7 +6870,7 @@ private class ReduceAction245
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction246
+private class ReduceAction255
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6439,7 +6885,7 @@ private class ReduceAction246
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction247
+private class ReduceAction256
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6462,7 +6908,7 @@ private class ReduceAction247
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction248
+private class ReduceAction257
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6482,7 +6928,7 @@ private class ReduceAction248
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction249
+private class ReduceAction258
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6499,21 +6945,27 @@ private class ReduceAction249
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist6
-                                       assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist8
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist6
                                        assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode6 = nodearraylist7
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist8
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               pexprnode5
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               tkwelsenode6,
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction250
+private class ReduceAction259
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6528,23 +6980,28 @@ private class ReduceAction250
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist6
-                                       assert pexprnode4 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist6
+                                       assert pexprnode5 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction251
+private class ReduceAction260
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist9 = p.pop
                                        var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
@@ -6557,25 +7014,32 @@ private class ReduceAction251
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist8
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist7
                                        assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode6 = nodearraylist8
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist9
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               pexprnode5
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               tkwelsenode6,
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction252
+private class ReduceAction261
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
                                        var nodearraylist5 = p.pop
                                        var nodearraylist4 = p.pop
@@ -6586,23 +7050,30 @@ private class ReduceAction252
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist6
-                                       assert pexprnode5 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var tkwelsenode6 = nodearraylist6
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist7
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
+                                               tkwthennode4,
                                                null,
-                                               pexprnode5
+                                               tkwelsenode6,
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction253
+private class ReduceAction262
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
                                        var nodearraylist5 = p.pop
@@ -6614,19 +7085,123 @@ private class ReduceAction253
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var tkwelsenode6 = nodearraylist7
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist8
+                                       assert pexprnode7 isa nullable AExpr
+                                       var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
+                                               tkwifnode2,
+                                               pexprnode3,
+                                               tkwthennode4,
+                                               null,
+                                               tkwelsenode6,
+                                               pexprnode7
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction263
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist8 = p.pop
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tkwifnode2 = nodearraylist1
+                                       assert tkwifnode2 isa nullable TKwif
+                                       var pexprnode3 = nodearraylist3
+                                       assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
                                        var pexprnode5 = nodearraylist7
                                        assert pexprnode5 isa nullable AExpr
+                                       var pexprnode7 = nodearraylist8
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
+                                               tkwthennode4,
+                                               pexprnode5,
                                                null,
-                                               pexprnode5
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction256
+private class ReduceAction264
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tkwifnode2 = nodearraylist1
+                                       assert tkwifnode2 isa nullable TKwif
+                                       var pexprnode3 = nodearraylist3
+                                       assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode7 = nodearraylist6
+                                       assert pexprnode7 isa nullable AExpr
+                                       var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
+                                               tkwifnode2,
+                                               pexprnode3,
+                                               tkwthennode4,
+                                               null,
+                                               null,
+                                               pexprnode7
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction265
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tkwifnode2 = nodearraylist1
+                                       assert tkwifnode2 isa nullable TKwif
+                                       var pexprnode3 = nodearraylist3
+                                       assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode7 = nodearraylist7
+                                       assert pexprnode7 isa nullable AExpr
+                                       var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
+                                               tkwifnode2,
+                                               pexprnode3,
+                                               tkwthennode4,
+                                               null,
+                                               null,
+                                               pexprnode7
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction267
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6649,7 +7224,7 @@ private class ReduceAction256
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction257
+private class ReduceAction268
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6669,7 +7244,7 @@ private class ReduceAction257
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction258
+private class ReduceAction269
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6702,7 +7277,7 @@ private class ReduceAction258
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction259
+private class ReduceAction270
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6732,7 +7307,7 @@ private class ReduceAction259
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction260
+private class ReduceAction271
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6754,27 +7329,30 @@ private class ReduceAction260
                                        var listnode3 = nodearraylist3
                                        assert listnode3 isa Array[Object]
                                        listnode4 = concat(listnode4, listnode3)
-                                       var pexprnode5 = nodearraylist7
-                                       assert pexprnode5 isa nullable AExpr
-                                       var tkwdonode6 = nodearraylist9
-                                       assert tkwdonode6 isa nullable TKwdo
-                                       var pexprnode7 = nodearraylist10
-                                       assert pexprnode7 isa nullable AExpr
-                                       var plabelnode8 = nodearraylist11
-                                       assert plabelnode8 isa nullable ALabel
+                                       var tkwinnode5 = nodearraylist5
+                                       assert tkwinnode5 isa nullable TKwin
+                                       var pexprnode6 = nodearraylist7
+                                       assert pexprnode6 isa nullable AExpr
+                                       var tkwdonode7 = nodearraylist9
+                                       assert tkwdonode7 isa nullable TKwdo
+                                       var pexprnode8 = nodearraylist10
+                                       assert pexprnode8 isa nullable AExpr
+                                       var plabelnode9 = nodearraylist11
+                                       assert plabelnode9 isa nullable ALabel
                                        var pexprnode1: nullable AForExpr = new AForExpr.init_aforexpr(
                                                tkwfornode2,
                                                listnode4,
-                                               pexprnode5,
-                                               tkwdonode6,
-                                               pexprnode7,
-                                               plabelnode8
+                                               tkwinnode5,
+                                               pexprnode6,
+                                               tkwdonode7,
+                                               pexprnode8,
+                                               plabelnode9
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction261
+private class ReduceAction272
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6795,25 +7373,28 @@ private class ReduceAction261
                                        var listnode3 = nodearraylist3
                                        assert listnode3 isa Array[Object]
                                        listnode4 = concat(listnode4, listnode3)
-                                       var pexprnode5 = nodearraylist7
-                                       assert pexprnode5 isa nullable AExpr
-                                       var tkwdonode6 = nodearraylist9
-                                       assert tkwdonode6 isa nullable TKwdo
-                                       var pexprnode7 = nodearraylist10
-                                       assert pexprnode7 isa nullable AExpr
+                                       var tkwinnode5 = nodearraylist5
+                                       assert tkwinnode5 isa nullable TKwin
+                                       var pexprnode6 = nodearraylist7
+                                       assert pexprnode6 isa nullable AExpr
+                                       var tkwdonode7 = nodearraylist9
+                                       assert tkwdonode7 isa nullable TKwdo
+                                       var pexprnode8 = nodearraylist10
+                                       assert pexprnode8 isa nullable AExpr
                                        var pexprnode1: nullable AForExpr = new AForExpr.init_aforexpr(
                                                tkwfornode2,
                                                listnode4,
-                                               pexprnode5,
-                                               tkwdonode6,
-                                               pexprnode7,
+                                               tkwinnode5,
+                                               pexprnode6,
+                                               tkwdonode7,
+                                               pexprnode8,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction262
+private class ReduceAction273
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6846,7 +7427,7 @@ private class ReduceAction262
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction263
+private class ReduceAction274
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6876,7 +7457,7 @@ private class ReduceAction263
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction264
+private class ReduceAction275
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6906,7 +7487,7 @@ private class ReduceAction264
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction265
+private class ReduceAction276
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6939,7 +7520,7 @@ private class ReduceAction265
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction267
+private class ReduceAction278
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6952,19 +7533,22 @@ private class ReduceAction267
                                        assert tkwassertnode2 isa nullable TKwassert
                                        var pexprnode4 = nodearraylist2
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist4
-                                       assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode5 = nodearraylist3
+                                       assert tkwelsenode5 isa nullable TKwelse
+                                       var pexprnode6 = nodearraylist4
+                                       assert pexprnode6 isa nullable AExpr
                                        var pexprnode1: nullable AAssertExpr = new AAssertExpr.init_aassertexpr(
                                                tkwassertnode2,
                                                null,
                                                pexprnode4,
-                                               pexprnode5
+                                               tkwelsenode5,
+                                               pexprnode6
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction268
+private class ReduceAction279
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6980,19 +7564,22 @@ private class ReduceAction268
                                        assert tidnode3 isa nullable TId
                                        var pexprnode4 = nodearraylist3
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist5
-                                       assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode5 = nodearraylist4
+                                       assert tkwelsenode5 isa nullable TKwelse
+                                       var pexprnode6 = nodearraylist5
+                                       assert pexprnode6 isa nullable AExpr
                                        var pexprnode1: nullable AAssertExpr = new AAssertExpr.init_aassertexpr(
                                                tkwassertnode2,
                                                tidnode3,
                                                pexprnode4,
-                                               pexprnode5
+                                               tkwelsenode5,
+                                               pexprnode6
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction269
+private class ReduceAction280
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7007,13 +7594,14 @@ private class ReduceAction269
                                                tkwassertnode2,
                                                null,
                                                pexprnode4,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction270
+private class ReduceAction281
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7031,13 +7619,14 @@ private class ReduceAction270
                                                tkwassertnode2,
                                                tidnode3,
                                                pexprnode4,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction271
+private class ReduceAction282
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7049,7 +7638,7 @@ private class ReduceAction271
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction273
+private class ReduceAction284
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7089,7 +7678,7 @@ private class ReduceAction273
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction275
+private class ReduceAction286
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7113,7 +7702,7 @@ private class ReduceAction275
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction276
+private class ReduceAction287
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7137,7 +7726,7 @@ private class ReduceAction276
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction277
+private class ReduceAction288
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7165,7 +7754,7 @@ private class ReduceAction277
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction278
+private class ReduceAction289
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7189,7 +7778,7 @@ private class ReduceAction278
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction280
+private class ReduceAction291
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7209,7 +7798,7 @@ private class ReduceAction280
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction282
+private class ReduceAction293
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7233,7 +7822,79 @@ private class ReduceAction282
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction283
+private class ReduceAction294
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var pexprnode2 = nodearraylist1
+                                       assert pexprnode2 isa nullable AExpr
+                                       var tnenode3 = nodearraylist2
+                                       assert tnenode3 isa nullable TNe
+                                       var pexprnode4 = nodearraylist4
+                                       assert pexprnode4 isa nullable AExpr
+                                       var pexprnode1: nullable ANeExpr = new ANeExpr.init_aneexpr(
+                                               pexprnode2,
+                                               tnenode3,
+                                               pexprnode4
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction295
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var pexprnode2 = nodearraylist1
+                                       assert pexprnode2 isa nullable AExpr
+                                       var tltnode3 = nodearraylist2
+                                       assert tltnode3 isa nullable TLt
+                                       var pexprnode4 = nodearraylist4
+                                       assert pexprnode4 isa nullable AExpr
+                                       var pexprnode1: nullable ALtExpr = new ALtExpr.init_altexpr(
+                                               pexprnode2,
+                                               tltnode3,
+                                               pexprnode4
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction296
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var pexprnode2 = nodearraylist1
+                                       assert pexprnode2 isa nullable AExpr
+                                       var tlenode3 = nodearraylist2
+                                       assert tlenode3 isa nullable TLe
+                                       var pexprnode4 = nodearraylist4
+                                       assert pexprnode4 isa nullable AExpr
+                                       var pexprnode1: nullable ALeExpr = new ALeExpr.init_aleexpr(
+                                               pexprnode2,
+                                               tlenode3,
+                                               pexprnode4
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction297
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7244,20 +7905,20 @@ private class ReduceAction283
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tnenode3 = nodearraylist2
-                                       assert tnenode3 isa nullable TNe
+                                       var tgtnode3 = nodearraylist2
+                                       assert tgtnode3 isa nullable TGt
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable ANeExpr = new ANeExpr.init_aneexpr(
+                                       var pexprnode1: nullable AGtExpr = new AGtExpr.init_agtexpr(
                                                pexprnode2,
-                                               tnenode3,
+                                               tgtnode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction284
+private class ReduceAction298
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7268,20 +7929,20 @@ private class ReduceAction284
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tltnode3 = nodearraylist2
-                                       assert tltnode3 isa nullable TLt
+                                       var tgenode3 = nodearraylist2
+                                       assert tgenode3 isa nullable TGe
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable ALtExpr = new ALtExpr.init_altexpr(
+                                       var pexprnode1: nullable AGeExpr = new AGeExpr.init_ageexpr(
                                                pexprnode2,
-                                               tltnode3,
+                                               tgenode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction285
+private class ReduceAction299
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7292,20 +7953,20 @@ private class ReduceAction285
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tlenode3 = nodearraylist2
-                                       assert tlenode3 isa nullable TLe
+                                       var tstarshipnode3 = nodearraylist2
+                                       assert tstarshipnode3 isa nullable TStarship
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable ALeExpr = new ALeExpr.init_aleexpr(
+                                       var pexprnode1: nullable AStarshipExpr = new AStarshipExpr.init_astarshipexpr(
                                                pexprnode2,
-                                               tlenode3,
+                                               tstarshipnode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction286
+private class ReduceAction300
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7316,20 +7977,20 @@ private class ReduceAction286
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tllnode3 = nodearraylist2
-                                       assert tllnode3 isa nullable TLl
-                                       var pexprnode4 = nodearraylist4
-                                       assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable ALlExpr = new ALlExpr.init_allexpr(
+                                       var tkwisanode3 = nodearraylist2
+                                       assert tkwisanode3 isa nullable TKwisa
+                                       var ptypenode4 = nodearraylist4
+                                       assert ptypenode4 isa nullable AType
+                                       var pexprnode1: nullable AIsaExpr = new AIsaExpr.init_aisaexpr(
                                                pexprnode2,
-                                               tllnode3,
-                                               pexprnode4
+                                               tkwisanode3,
+                                               ptypenode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction287
+private class ReduceAction302
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7340,20 +8001,20 @@ private class ReduceAction287
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tgtnode3 = nodearraylist2
-                                       assert tgtnode3 isa nullable TGt
+                                       var tpipenode3 = nodearraylist2
+                                       assert tpipenode3 isa nullable TPipe
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable AGtExpr = new AGtExpr.init_agtexpr(
+                                       var pexprnode1: nullable APipeExpr = new APipeExpr.init_apipeexpr(
                                                pexprnode2,
-                                               tgtnode3,
+                                               tpipenode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction288
+private class ReduceAction304
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7364,20 +8025,20 @@ private class ReduceAction288
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tgenode3 = nodearraylist2
-                                       assert tgenode3 isa nullable TGe
+                                       var tcaretnode3 = nodearraylist2
+                                       assert tcaretnode3 isa nullable TCaret
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable AGeExpr = new AGeExpr.init_ageexpr(
+                                       var pexprnode1: nullable ACaretExpr = new ACaretExpr.init_acaretexpr(
                                                pexprnode2,
-                                               tgenode3,
+                                               tcaretnode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction289
+private class ReduceAction306
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7388,20 +8049,20 @@ private class ReduceAction289
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tggnode3 = nodearraylist2
-                                       assert tggnode3 isa nullable TGg
+                                       var tampnode3 = nodearraylist2
+                                       assert tampnode3 isa nullable TAmp
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable AGgExpr = new AGgExpr.init_aggexpr(
+                                       var pexprnode1: nullable AAmpExpr = new AAmpExpr.init_aampexpr(
                                                pexprnode2,
-                                               tggnode3,
+                                               tampnode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction290
+private class ReduceAction308
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7412,20 +8073,20 @@ private class ReduceAction290
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tstarshipnode3 = nodearraylist2
-                                       assert tstarshipnode3 isa nullable TStarship
+                                       var tllnode3 = nodearraylist2
+                                       assert tllnode3 isa nullable TLl
                                        var pexprnode4 = nodearraylist4
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode1: nullable AStarshipExpr = new AStarshipExpr.init_astarshipexpr(
+                                       var pexprnode1: nullable ALlExpr = new ALlExpr.init_allexpr(
                                                pexprnode2,
-                                               tstarshipnode3,
+                                               tllnode3,
                                                pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction291
+private class ReduceAction309
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7436,20 +8097,20 @@ private class ReduceAction291
                                        var nodearraylist1 = p.pop
                                        var pexprnode2 = nodearraylist1
                                        assert pexprnode2 isa nullable AExpr
-                                       var tkwisanode3 = nodearraylist2
-                                       assert tkwisanode3 isa nullable TKwisa
-                                       var ptypenode4 = nodearraylist4
-                                       assert ptypenode4 isa nullable AType
-                                       var pexprnode1: nullable AIsaExpr = new AIsaExpr.init_aisaexpr(
+                                       var tggnode3 = nodearraylist2
+                                       assert tggnode3 isa nullable TGg
+                                       var pexprnode4 = nodearraylist4
+                                       assert pexprnode4 isa nullable AExpr
+                                       var pexprnode1: nullable AGgExpr = new AGgExpr.init_aggexpr(
                                                pexprnode2,
-                                               tkwisanode3,
-                                               ptypenode4
+                                               tggnode3,
+                                               pexprnode4
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction293
+private class ReduceAction311
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7473,7 +8134,7 @@ private class ReduceAction293
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction294
+private class ReduceAction312
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7497,7 +8158,7 @@ private class ReduceAction294
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction296
+private class ReduceAction314
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7521,7 +8182,7 @@ private class ReduceAction296
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction297
+private class ReduceAction315
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7545,7 +8206,7 @@ private class ReduceAction297
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction298
+private class ReduceAction316
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7569,7 +8230,7 @@ private class ReduceAction298
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction300
+private class ReduceAction318
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7593,7 +8254,7 @@ private class ReduceAction300
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction302
+private class ReduceAction320
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7612,7 +8273,7 @@ private class ReduceAction302
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction303
+private class ReduceAction321
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7631,7 +8292,26 @@ private class ReduceAction303
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction304
+private class ReduceAction322
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var ttildenode2 = nodearraylist1
+                                       assert ttildenode2 isa nullable TTilde
+                                       var pexprnode3 = nodearraylist2
+                                       assert pexprnode3 isa nullable AExpr
+                                       var pexprnode1: nullable AUtildeExpr = new AUtildeExpr.init_autildeexpr(
+                                               ttildenode2,
+                                               pexprnode3
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction323
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7651,7 +8331,7 @@ private class ReduceAction304
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction306
+private class ReduceAction325
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7676,7 +8356,7 @@ private class ReduceAction306
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction307
+private class ReduceAction326
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7702,7 +8382,7 @@ private class ReduceAction307
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction308
+private class ReduceAction327
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7728,7 +8408,7 @@ private class ReduceAction308
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction309
+private class ReduceAction328
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7750,7 +8430,7 @@ private class ReduceAction309
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction311
+private class ReduceAction330
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7772,7 +8452,7 @@ private class ReduceAction311
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction312
+private class ReduceAction331
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7790,7 +8470,7 @@ private class ReduceAction312
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction314
+private class ReduceAction333
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7816,7 +8496,7 @@ private class ReduceAction314
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction316
+private class ReduceAction335
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7843,7 +8523,7 @@ private class ReduceAction316
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction318
+private class ReduceAction337
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7871,7 +8551,7 @@ private class ReduceAction318
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction322
+private class ReduceAction341
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7893,7 +8573,7 @@ private class ReduceAction322
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction324
+private class ReduceAction343
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7916,7 +8596,7 @@ private class ReduceAction324
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction326
+private class ReduceAction345
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7940,7 +8620,7 @@ private class ReduceAction326
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction330
+private class ReduceAction349
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7964,7 +8644,7 @@ private class ReduceAction330
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction332
+private class ReduceAction351
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7990,7 +8670,7 @@ private class ReduceAction332
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction334
+private class ReduceAction353
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8012,7 +8692,7 @@ private class ReduceAction334
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction335
+private class ReduceAction354
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8031,7 +8711,7 @@ private class ReduceAction335
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction336
+private class ReduceAction355
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8061,7 +8741,7 @@ private class ReduceAction336
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction337
+private class ReduceAction356
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8092,7 +8772,7 @@ private class ReduceAction337
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction338
+private class ReduceAction357
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8123,7 +8803,7 @@ private class ReduceAction338
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction339
+private class ReduceAction358
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8155,7 +8835,7 @@ private class ReduceAction339
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction340
+private class ReduceAction359
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8187,7 +8867,7 @@ private class ReduceAction340
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction341
+private class ReduceAction360
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8220,7 +8900,7 @@ private class ReduceAction341
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction344
+private class ReduceAction363
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8256,7 +8936,7 @@ private class ReduceAction344
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction345
+private class ReduceAction364
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8297,7 +8977,7 @@ private class ReduceAction345
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction346
+private class ReduceAction365
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8330,7 +9010,7 @@ private class ReduceAction346
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction347
+private class ReduceAction367
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8349,7 +9029,30 @@ private class ReduceAction347
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction348
+private class ReduceAction368
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tidnode2 = nodearraylist1
+                                       assert tidnode2 isa nullable TId
+                                       var tassignnode3 = nodearraylist2
+                                       assert tassignnode3 isa nullable TAssign
+                                       var pexprnode4 = nodearraylist3
+                                       assert pexprnode4 isa nullable AExpr
+                                       var pexprnode1: nullable ANamedargExpr = new ANamedargExpr.init_anamedargexpr(
+                                               tidnode2,
+                                               tassignnode3,
+                                               pexprnode4
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction369
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8368,7 +9071,7 @@ private class ReduceAction348
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction349
+private class ReduceAction370
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8387,7 +9090,7 @@ private class ReduceAction349
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction350
+private class ReduceAction371
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8406,7 +9109,7 @@ private class ReduceAction350
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction351
+private class ReduceAction372
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8425,7 +9128,7 @@ private class ReduceAction351
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction352
+private class ReduceAction373
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8444,7 +9147,7 @@ private class ReduceAction352
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction353
+private class ReduceAction374
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8463,7 +9166,7 @@ private class ReduceAction353
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction354
+private class ReduceAction375
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8482,7 +9185,7 @@ private class ReduceAction354
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction355
+private class ReduceAction376
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8501,7 +9204,7 @@ private class ReduceAction355
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction356
+private class ReduceAction377
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8520,7 +9223,7 @@ private class ReduceAction356
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction359
+private class ReduceAction380
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8539,24 +9242,27 @@ private class ReduceAction359
                                        assert tobranode2 isa nullable TObra
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
-                                       var tcbranode5 = nodearraylist9
-                                       assert tcbranode5 isa nullable TCbra
-                                       var pannotationsnode6 = nodearraylist10
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tdotdotnode4 = nodearraylist5
+                                       assert tdotdotnode4 isa nullable TDotdot
+                                       var pexprnode5 = nodearraylist7
+                                       assert pexprnode5 isa nullable AExpr
+                                       var tcbranode6 = nodearraylist9
+                                       assert tcbranode6 isa nullable TCbra
+                                       var pannotationsnode7 = nodearraylist10
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var pexprnode1: nullable ACrangeExpr = new ACrangeExpr.init_acrangeexpr(
                                                tobranode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               tcbranode5,
-                                               pannotationsnode6
+                                               tdotdotnode4,
+                                               pexprnode5,
+                                               tcbranode6,
+                                               pannotationsnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction360
+private class ReduceAction381
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8575,24 +9281,27 @@ private class ReduceAction360
                                        assert tobranode2 isa nullable TObra
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
-                                       var tobranode5 = nodearraylist9
-                                       assert tobranode5 isa nullable TObra
-                                       var pannotationsnode6 = nodearraylist10
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tdotdotnode4 = nodearraylist5
+                                       assert tdotdotnode4 isa nullable TDotdot
+                                       var pexprnode5 = nodearraylist7
+                                       assert pexprnode5 isa nullable AExpr
+                                       var tobranode6 = nodearraylist9
+                                       assert tobranode6 isa nullable TObra
+                                       var pannotationsnode7 = nodearraylist10
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var pexprnode1: nullable AOrangeExpr = new AOrangeExpr.init_aorangeexpr(
                                                tobranode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               tobranode5,
-                                               pannotationsnode6
+                                               tdotdotnode4,
+                                               pexprnode5,
+                                               tobranode6,
+                                               pannotationsnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction361
+private class ReduceAction382
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8626,7 +9335,7 @@ private class ReduceAction361
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction362
+private class ReduceAction383
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8655,7 +9364,7 @@ private class ReduceAction362
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction364
+private class ReduceAction385
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8678,7 +9387,7 @@ private class ReduceAction364
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction365
+private class ReduceAction386
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8691,7 +9400,7 @@ private class ReduceAction365
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction366
+private class ReduceAction387
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8706,7 +9415,7 @@ private class ReduceAction366
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction367
+private class ReduceAction388
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8725,7 +9434,7 @@ private class ReduceAction367
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction369
+private class ReduceAction390
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8737,7 +9446,7 @@ private class ReduceAction369
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction371
+private class ReduceAction392
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8753,19 +9462,23 @@ private class ReduceAction371
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist7
+                                       assert pexprnode5 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction372
+private class ReduceAction393
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8792,7 +9505,7 @@ private class ReduceAction372
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction373
+private class ReduceAction394
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8823,7 +9536,7 @@ private class ReduceAction373
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction374
+private class ReduceAction395
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8845,7 +9558,7 @@ private class ReduceAction374
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction375
+private class ReduceAction396
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8861,7 +9574,7 @@ private class ReduceAction375
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction376
+private class ReduceAction397
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8876,7 +9589,7 @@ private class ReduceAction376
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction379
+private class ReduceAction400
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8891,7 +9604,7 @@ private class ReduceAction379
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction380
+private class ReduceAction401
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8906,63 +9619,67 @@ private class ReduceAction380
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction381
+private class ReduceAction402
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
-                                       var tatnode2 = nodearraylist1
-                                       assert tatnode2 isa nullable TAt
-                                       var pannotationnode4 = nodearraylist2
-                                       assert pannotationnode4 isa nullable AAnnotation
-                                       if pannotationnode4 != null then
-                                               listnode5.add(pannotationnode4)
+                                       var listnode6 = new Array[Object]
+                                       var tatnode3 = nodearraylist1
+                                       assert tatnode3 isa nullable TAt
+                                       var pannotationnode5 = nodearraylist2
+                                       assert pannotationnode5 isa nullable AAnnotation
+                                       if pannotationnode5 != null then
+                                               listnode6.add(pannotationnode5)
                                        end
                                        var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
-                                               tatnode2,
                                                null,
-                                               listnode5,
+                                               tatnode3,
+                                               null,
+                                               listnode6,
+                                               null,
                                                null
                                        )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction382
+private class ReduceAction403
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist6 = p.pop
                                        var nodearraylist5 = p.pop
-                                       var nodearraylist4 = p.pop
-                                       var nodearraylist3 = p.pop
-                                       var nodearraylist2 = p.pop
-                                       var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
-                                       var tatnode2 = nodearraylist1
-                                       assert tatnode2 isa nullable TAt
-                                       var toparnode3 = nodearraylist2
-                                       assert toparnode3 isa nullable TOpar
-                                       var listnode4 = nodearraylist4
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var tcparnode6 = nodearraylist6
-                                       assert tcparnode6 isa nullable TCpar
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var listnode6 = new Array[Object]
+                                       var tatnode3 = nodearraylist1
+                                       assert tatnode3 isa nullable TAt
+                                       var toparnode4 = nodearraylist2
+                                       assert toparnode4 isa nullable TOpar
+                                       var listnode5 = nodearraylist4
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tcparnode7 = nodearraylist6
+                                       assert tcparnode7 isa nullable TCpar
                                        var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
-                                               tatnode2,
-                                               toparnode3,
-                                               listnode5,
-                                               tcparnode6
+                                               null,
+                                               tatnode3,
+                                               toparnode4,
+                                               listnode6,
+                                               tcparnode7,
+                                               null
                                        )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction383
+private class ReduceAction404
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8973,7 +9690,7 @@ private class ReduceAction383
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction385
+private class ReduceAction406
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9005,7 +9722,7 @@ private class ReduceAction385
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction386
+private class ReduceAction407
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9049,27 +9766,7 @@ private class ReduceAction386
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction387
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
-                                       var listnode4 = nodearraylist1
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
-                                               null,
-                                               null,
-                                               listnode5,
-                                               null
-                                       )
-                                       node_list = pannotationsnode1
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction388
+private class ReduceAction408
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9084,7 +9781,7 @@ private class ReduceAction388
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction389
+private class ReduceAction409
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9103,7 +9800,7 @@ private class ReduceAction389
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction392
+private class ReduceAction412
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9138,7 +9835,7 @@ private class ReduceAction392
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction394
+private class ReduceAction414
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9151,7 +9848,7 @@ private class ReduceAction394
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction396
+private class ReduceAction415
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9184,7 +9881,7 @@ private class ReduceAction396
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction397
+private class ReduceAction416
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9220,7 +9917,7 @@ private class ReduceAction397
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction398
+private class ReduceAction417
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9264,7 +9961,7 @@ private class ReduceAction398
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction399
+private class ReduceAction418
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9311,7 +10008,7 @@ private class ReduceAction399
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction400
+private class ReduceAction419
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9348,7 +10045,7 @@ private class ReduceAction400
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction401
+private class ReduceAction420
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9374,7 +10071,7 @@ private class ReduceAction401
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction402
+private class ReduceAction421
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9403,7 +10100,7 @@ private class ReduceAction402
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction403
+private class ReduceAction422
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9440,7 +10137,7 @@ private class ReduceAction403
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction404
+private class ReduceAction423
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9480,7 +10177,7 @@ private class ReduceAction404
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction405
+private class ReduceAction424
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9510,7 +10207,7 @@ private class ReduceAction405
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction409
+private class ReduceAction428
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9525,7 +10222,7 @@ private class ReduceAction409
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction412
+private class ReduceAction431
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9546,7 +10243,7 @@ private class ReduceAction412
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction413
+private class ReduceAction432
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9563,7 +10260,7 @@ private class ReduceAction413
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction414
+private class ReduceAction433
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9578,7 +10275,7 @@ private class ReduceAction414
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction415
+private class ReduceAction434
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9593,7 +10290,7 @@ private class ReduceAction415
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction416
+private class ReduceAction435
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9608,7 +10305,7 @@ private class ReduceAction416
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction417
+private class ReduceAction436
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9623,7 +10320,7 @@ private class ReduceAction417
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction418
+private class ReduceAction437
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9649,7 +10346,7 @@ private class ReduceAction418
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction419
+private class ReduceAction438
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9671,7 +10368,7 @@ private class ReduceAction419
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction421
+private class ReduceAction440
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9690,7 +10387,7 @@ private class ReduceAction421
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction423
+private class ReduceAction442
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9703,7 +10400,7 @@ private class ReduceAction423
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction424
+private class ReduceAction443
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9729,24 +10426,7 @@ private class ReduceAction424
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction425
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist1 = p.pop
-                                       var listnode3 = new Array[Object]
-                                       var listnode2 = nodearraylist1
-                                       assert listnode2 isa Array[Object]
-                                       listnode3 = concat(listnode3, listnode2)
-                                       var pexprsnode1: nullable AListExprs = new AListExprs.init_alistexprs(
-                                               listnode3
-                                       )
-                                       node_list = pexprsnode1
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction427
+private class ReduceAction445
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9766,7 +10446,7 @@ private class ReduceAction427
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction428
+private class ReduceAction446
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9780,7 +10460,7 @@ private class ReduceAction428
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction429
+private class ReduceAction447
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9798,7 +10478,7 @@ private class ReduceAction429
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction430
+private class ReduceAction448
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9812,7 +10492,7 @@ private class ReduceAction430
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction431
+private class ReduceAction449
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9827,7 +10507,7 @@ private class ReduceAction431
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction432
+private class ReduceAction450
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9848,7 +10528,7 @@ private class ReduceAction432
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction433
+private class ReduceAction451
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9866,7 +10546,7 @@ private class ReduceAction433
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction434
+private class ReduceAction452
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9888,7 +10568,7 @@ private class ReduceAction434
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction435
+private class ReduceAction453
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9910,7 +10590,7 @@ private class ReduceAction435
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction436
+private class ReduceAction454
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9936,7 +10616,7 @@ private class ReduceAction436
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction437
+private class ReduceAction455
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9953,7 +10633,7 @@ private class ReduceAction437
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction438
+private class ReduceAction456
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9974,7 +10654,7 @@ private class ReduceAction438
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction439
+private class ReduceAction457
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9992,7 +10672,7 @@ private class ReduceAction439
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction441
+private class ReduceAction459
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10003,7 +10683,7 @@ private class ReduceAction441
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction442
+private class ReduceAction460
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10015,7 +10695,7 @@ private class ReduceAction442
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction443
+private class ReduceAction461
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10028,7 +10708,7 @@ private class ReduceAction443
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction445
+private class ReduceAction463
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10039,7 +10719,7 @@ private class ReduceAction445
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction446
+private class ReduceAction464
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10051,7 +10731,7 @@ private class ReduceAction446
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction447
+private class ReduceAction465
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10064,7 +10744,7 @@ private class ReduceAction447
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction449
+private class ReduceAction467
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10077,7 +10757,7 @@ private class ReduceAction449
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction450
+private class ReduceAction468
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10090,7 +10770,7 @@ private class ReduceAction450
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction452
+private class ReduceAction470
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10101,7 +10781,7 @@ private class ReduceAction452
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction453
+private class ReduceAction471
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10110,7 +10790,7 @@ private class ReduceAction453
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction455
+private class ReduceAction474
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10127,7 +10807,7 @@ private class ReduceAction455
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction456
+private class ReduceAction475
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10145,39 +10825,98 @@ private class ReduceAction456
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction459
+private class ReduceAction478
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pdocnode1 = nodearraylist1
+                                       node_list = null
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction480
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       node_list = null
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction481
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist2
                                        node_list = pdocnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction460
+private class ReduceAction482
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist3
+                                       node_list = pdocnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction461
+private class ReduceAction484
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist4
+                                       node_list = pdocnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction486
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist1
+                                       node_list = pdocnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction487
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction490
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction793
+private class ReduceAction853
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10201,7 +10940,7 @@ private class ReduceAction793
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction795
+private class ReduceAction855
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10221,7 +10960,7 @@ private class ReduceAction795
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction796
+private class ReduceAction856
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10244,7 +10983,7 @@ private class ReduceAction796
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction797
+private class ReduceAction857
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10268,7 +11007,7 @@ private class ReduceAction797
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction798
+private class ReduceAction858
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10292,7 +11031,7 @@ private class ReduceAction798
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction799
+private class ReduceAction859
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10317,7 +11056,7 @@ private class ReduceAction799
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction806
+private class ReduceAction866
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10340,7 +11079,7 @@ private class ReduceAction806
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction807
+private class ReduceAction867
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10364,7 +11103,7 @@ private class ReduceAction807
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction830
+private class ReduceAction892
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10377,7 +11116,7 @@ private class ReduceAction830
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction831
+private class ReduceAction893
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10387,7 +11126,7 @@ private class ReduceAction831
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction989
+private class ReduceAction1054
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10402,7 +11141,7 @@ private class ReduceAction989
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction990
+private class ReduceAction1055
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10421,7 +11160,7 @@ private class ReduceAction990
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction991
+private class ReduceAction1056
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10436,7 +11175,7 @@ private class ReduceAction991
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction992
+private class ReduceAction1057
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10455,7 +11194,7 @@ private class ReduceAction992
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction993
+private class ReduceAction1058
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10470,7 +11209,7 @@ private class ReduceAction993
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction994
+private class ReduceAction1059
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10489,22 +11228,26 @@ private class ReduceAction994
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction995
+private class ReduceAction1061
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode2 = new Array[Object]
-                                       var pformaldefnode1 = nodearraylist1
-                                       if pformaldefnode1 != null then
-                                               listnode2.add(pformaldefnode1)
+                                       var listnode3 = new Array[Object]
+                                       var listnode1 = nodearraylist1
+                                       assert listnode1 isa Array[Object]
+                                       var pformaldefnode2 = nodearraylist2
+                                       listnode3 = concat(listnode3, listnode1)
+                                       if pformaldefnode2 != null then
+                                               listnode3.add(pformaldefnode2)
                                        end
-                                       node_list = listnode2
+                                       node_list = listnode3
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction996
+private class ReduceAction1063
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10514,16 +11257,16 @@ private class ReduceAction996
                                        var listnode3 = new Array[Object]
                                        var listnode1 = nodearraylist1
                                        assert listnode1 isa Array[Object]
-                                       var pformaldefnode2 = nodearraylist2
+                                       var ppropdefnode2 = nodearraylist2
                                        listnode3 = concat(listnode3, listnode1)
-                                       if pformaldefnode2 != null then
-                                               listnode3.add(pformaldefnode2)
+                                       if ppropdefnode2 != null then
+                                               listnode3.add(ppropdefnode2)
                                        end
                                        node_list = listnode3
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction998
+private class ReduceAction1065
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10533,16 +11276,16 @@ private class ReduceAction998
                                        var listnode3 = new Array[Object]
                                        var listnode1 = nodearraylist1
                                        assert listnode1 isa Array[Object]
-                                       var ppropdefnode2 = nodearraylist2
+                                       var pannotationnode2 = nodearraylist2
                                        listnode3 = concat(listnode3, listnode1)
-                                       if ppropdefnode2 != null then
-                                               listnode3.add(ppropdefnode2)
+                                       if pannotationnode2 != null then
+                                               listnode3.add(pannotationnode2)
                                        end
                                        node_list = listnode3
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction999
+private class ReduceAction1066
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10557,7 +11300,7 @@ private class ReduceAction999
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1000
+private class ReduceAction1067
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10576,7 +11319,7 @@ private class ReduceAction1000
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1001
+private class ReduceAction1068
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10591,7 +11334,7 @@ private class ReduceAction1001
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1002
+private class ReduceAction1069
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10610,7 +11353,7 @@ private class ReduceAction1002
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1004
+private class ReduceAction1071
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10629,7 +11372,7 @@ private class ReduceAction1004
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1006
+private class ReduceAction1073
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10648,7 +11391,7 @@ private class ReduceAction1006
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1012
+private class ReduceAction1079
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10666,26 +11409,7 @@ private class ReduceAction1012
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1014
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist2 = p.pop
-                                       var nodearraylist1 = p.pop
-                                       var listnode3 = new Array[Object]
-                                       var listnode1 = nodearraylist1
-                                       assert listnode1 isa Array[Object]
-                                       var pannotationnode2 = nodearraylist2
-                                       listnode3 = concat(listnode3, listnode1)
-                                       if pannotationnode2 != null then
-                                               listnode3.add(pannotationnode2)
-                                       end
-                                       node_list = listnode3
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction1022
+private class ReduceAction1087
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10704,7 +11428,7 @@ private class ReduceAction1022
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1023
+private class ReduceAction1088
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10719,7 +11443,7 @@ private class ReduceAction1023
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1024
+private class ReduceAction1089
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10738,37 +11462,3 @@ private class ReduceAction1024
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1025
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist1 = p.pop
-                                       var listnode2 = new Array[Object]
-                                       var teolnode1 = nodearraylist1
-                                       if teolnode1 != null then
-                                               listnode2.add(teolnode1)
-                                       end
-                                       node_list = listnode2
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction1026
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist2 = p.pop
-                                       var nodearraylist1 = p.pop
-                                       var listnode3 = new Array[Object]
-                                       var listnode1 = nodearraylist1
-                                       assert listnode1 isa Array[Object]
-                                       var teolnode2 = nodearraylist2
-                                       listnode3 = concat(listnode3, listnode1)
-                                       if teolnode2 != null then
-                                               listnode3.add(teolnode2)
-                                       end
-                                       node_list = listnode3
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
index f2917d4..b26e0f9 100644 (file)
@@ -202,6 +202,15 @@ end
 class TStarstareq
        super Token
 end
+class TPipeeq
+       super Token
+end
+class TCareteq
+       super Token
+end
+class TAmpeq
+       super Token
+end
 class TLleq
        super Token
 end
@@ -235,6 +244,18 @@ end
 class TPercent
        super Token
 end
+class TPipe
+       super Token
+end
+class TCaret
+       super Token
+end
+class TAmp
+       super Token
+end
+class TTilde
+       super Token
+end
 class TEq
        super Token
 end
@@ -268,6 +289,9 @@ end
 class TAt
        super Token
 end
+class TSemi
+       super Token
+end
 class TClassid
        super Token
 end
@@ -402,7 +426,9 @@ class AStdClassdef
        var n_visibility: AVisibility is writable, noinit
        var n_classkind: AClasskind is writable, noinit
        var n_id: nullable TClassid = null is writable
+       var n_obra: nullable TObra = null is writable
        var n_formaldefs: List[AFormaldef] = new List[AFormaldef]
+       var n_cbra: nullable TCbra = null is writable
        var n_extern_code_block: nullable AExternCodeBlock = null is writable
        var n_propdefs: List[APropdef] = new List[APropdef]
        var n_kwend: TKwend is writable, noinit
@@ -451,9 +477,12 @@ class AAttrPropdef
        var n_kwvar: TKwvar is writable, noinit
        var n_id2: TId is writable, noinit
        var n_type: nullable AType = null is writable
+       var n_assign: nullable TAssign = null is writable
        var n_expr: nullable AExpr = null is writable
        var n_annotations: nullable AAnnotations = null is writable
+       var n_kwdo: nullable TKwdo = null is writable
        var n_block: nullable AExpr = null is writable
+       var n_kwend: nullable TKwend = null is writable
 end
 class AMainMethPropdef
        super APropdef
@@ -483,7 +512,9 @@ class AMethPropdef
        var n_annotations: nullable AAnnotations = null is writable
        var n_extern_calls: nullable AExternCalls = null is writable
        var n_extern_code_block: nullable AExternCodeBlock = null is writable
+       var n_kwdo: nullable TKwdo = null is writable
        var n_block: nullable AExpr = null is writable
+       var n_kwend: nullable TKwend = null is writable
 end
 class ASuperPropdef
        super APropdef
@@ -511,69 +542,85 @@ class AIdMethid
 end
 class APlusMethid
        super AMethid
-       var n_plus: TPlus is writable, noinit
+       var n_op: TPlus is writable, noinit
 end
 class AMinusMethid
        super AMethid
-       var n_minus: TMinus is writable, noinit
+       var n_op: TMinus is writable, noinit
 end
 class AStarMethid
        super AMethid
-       var n_star: TStar is writable, noinit
+       var n_op: TStar is writable, noinit
 end
 class AStarstarMethid
        super AMethid
-       var n_starstar: TStarstar is writable, noinit
+       var n_op: TStarstar is writable, noinit
 end
 class ASlashMethid
        super AMethid
-       var n_slash: TSlash is writable, noinit
+       var n_op: TSlash is writable, noinit
 end
 class APercentMethid
        super AMethid
-       var n_percent: TPercent is writable, noinit
+       var n_op: TPercent is writable, noinit
 end
 class AEqMethid
        super AMethid
-       var n_eq: TEq is writable, noinit
+       var n_op: TEq is writable, noinit
 end
 class ANeMethid
        super AMethid
-       var n_ne: TNe is writable, noinit
+       var n_op: TNe is writable, noinit
 end
 class ALeMethid
        super AMethid
-       var n_le: TLe is writable, noinit
+       var n_op: TLe is writable, noinit
 end
 class AGeMethid
        super AMethid
-       var n_ge: TGe is writable, noinit
+       var n_op: TGe is writable, noinit
 end
 class ALtMethid
        super AMethid
-       var n_lt: TLt is writable, noinit
+       var n_op: TLt is writable, noinit
 end
 class AGtMethid
        super AMethid
-       var n_gt: TGt is writable, noinit
+       var n_op: TGt is writable, noinit
 end
 class ALlMethid
        super AMethid
-       var n_ll: TLl is writable, noinit
+       var n_op: TLl is writable, noinit
 end
 class AGgMethid
        super AMethid
-       var n_gg: TGg is writable, noinit
+       var n_op: TGg is writable, noinit
+end
+class AStarshipMethid
+       super AMethid
+       var n_op: TStarship is writable, noinit
+end
+class APipeMethid
+       super AMethid
+       var n_op: TPipe is writable, noinit
+end
+class ACaretMethid
+       super AMethid
+       var n_op: TCaret is writable, noinit
+end
+class AAmpMethid
+       super AMethid
+       var n_op: TAmp is writable, noinit
+end
+class ATildeMethid
+       super AMethid
+       var n_op: TTilde is writable, noinit
 end
 class ABraMethid
        super AMethid
        var n_obra: TObra is writable, noinit
        var n_cbra: TCbra is writable, noinit
 end
-class AStarshipMethid
-       super AMethid
-       var n_starship: TStarship is writable, noinit
-end
 class AAssignMethid
        super AMethid
        var n_id: TId is writable, noinit
@@ -603,7 +650,9 @@ class AType
        super AType
        var n_kwnullable: nullable TKwnullable = null is writable
        var n_id: TClassid is writable, noinit
+       var n_obra: nullable TObra = null is writable
        var n_types: List[AType] = new List[AType]
+       var n_cbra: nullable TCbra = null is writable
        var n_annotations: nullable AAnnotations = null is writable
 end
 class ALabel
@@ -654,7 +703,9 @@ class AIfExpr
        super AExpr
        var n_kwif: TKwif is writable, noinit
        var n_expr: AExpr is writable, noinit
+       var n_kwthen: TKwthen is writable, noinit
        var n_then: nullable AExpr = null is writable
+       var n_kwelse: nullable TKwelse = null is writable
        var n_else: nullable AExpr = null is writable
 end
 class AIfexprExpr
@@ -684,6 +735,7 @@ class AForExpr
        super AExpr
        var n_kwfor: TKwfor is writable, noinit
        var n_ids: List[TId] = new List[TId]
+       var n_kwin: TKwin is writable, noinit
        var n_expr: AExpr is writable, noinit
        var n_kwdo: TKwdo is writable, noinit
        var n_block: nullable AExpr = null is writable
@@ -702,6 +754,7 @@ class AAssertExpr
        var n_kwassert: TKwassert is writable, noinit
        var n_id: nullable TId = null is writable
        var n_expr: AExpr is writable, noinit
+       var n_kwelse: nullable TKwelse = null is writable
        var n_else: nullable AExpr = null is writable
 end
 class AOnceExpr
@@ -844,14 +897,37 @@ class APercentExpr
        var n_op: TPercent is writable, noinit
        var n_expr2: AExpr is writable, noinit
 end
+class APipeExpr
+       super AExpr
+       var n_expr: AExpr is writable, noinit
+       var n_op: TPipe is writable, noinit
+       var n_expr2: AExpr is writable, noinit
+end
+class ACaretExpr
+       super AExpr
+       var n_expr: AExpr is writable, noinit
+       var n_op: TCaret is writable, noinit
+       var n_expr2: AExpr is writable, noinit
+end
+class AAmpExpr
+       super AExpr
+       var n_expr: AExpr is writable, noinit
+       var n_op: TAmp is writable, noinit
+       var n_expr2: AExpr is writable, noinit
+end
 class AUminusExpr
        super AExpr
-       var n_minus: TMinus is writable, noinit
+       var n_op: TMinus is writable, noinit
        var n_expr: AExpr is writable, noinit
 end
 class AUplusExpr
        super AExpr
-       var n_plus: TPlus is writable, noinit
+       var n_op: TPlus is writable, noinit
+       var n_expr: AExpr is writable, noinit
+end
+class AUtildeExpr
+       super AExpr
+       var n_op: TTilde is writable, noinit
        var n_expr: AExpr is writable, noinit
 end
 class ANewExpr
@@ -959,6 +1035,7 @@ class ACrangeExpr
        super AExpr
        var n_obra: TObra is writable, noinit
        var n_expr: AExpr is writable, noinit
+       var n_dotdot: TDotdot is writable, noinit
        var n_expr2: AExpr is writable, noinit
        var n_cbra: TCbra is writable, noinit
        var n_annotations: nullable AAnnotations = null is writable
@@ -967,6 +1044,7 @@ class AOrangeExpr
        super AExpr
        var n_obra: TObra is writable, noinit
        var n_expr: AExpr is writable, noinit
+       var n_dotdot: TDotdot is writable, noinit
        var n_expr2: AExpr is writable, noinit
        var n_cbra: TObra is writable, noinit
        var n_annotations: nullable AAnnotations = null is writable
@@ -1086,6 +1164,12 @@ class AVarargExpr
        var n_expr: AExpr is writable, noinit
        var n_dotdotdot: TDotdotdot is writable, noinit
 end
+class ANamedargExpr
+       super AExpr
+       var n_id: TId is writable, noinit
+       var n_assign: TAssign is writable, noinit
+       var n_expr: AExpr is writable, noinit
+end
 class ATypeExpr
        super AExpr
        var n_type: AType is writable, noinit
@@ -1143,6 +1227,18 @@ class AStarstarAssignOp
        super AAssignOp
        var n_op: TStarstareq is writable, noinit
 end
+class APipeAssignOp
+       super AAssignOp
+       var n_op: TPipeeq is writable, noinit
+end
+class ACaretAssignOp
+       super AAssignOp
+       var n_op: TCareteq is writable, noinit
+end
+class AAmpAssignOp
+       super AAssignOp
+       var n_op: TAmpeq is writable, noinit
+end
 class ALlAssignOp
        super AAssignOp
        var n_op: TLleq is writable, noinit
@@ -1224,10 +1320,12 @@ class ADoc
 end
 class AAnnotations
        super AAnnotations
+       var n_kwis: nullable TKwis = null is writable
        var n_at: nullable TAt = null is writable
        var n_opar: nullable TOpar = null is writable
        var n_items: List[AAnnotation] = new List[AAnnotation]
        var n_cpar: nullable TCpar = null is writable
+       var n_kwend: nullable TKwend = null is writable
 end
 class AAnnotation
        super AAnnotation
index 1525f17..fe79ef1 100644 (file)
@@ -750,6 +750,21 @@ class TStarstareq
        super TokenOperator
 end
 
+# The operator `|=`
+class TPipeeq
+       super TokenOperator
+end
+
+# The operator `^=`
+class TCareteq
+       super TokenOperator
+end
+
+# The operator `&=`
+class TAmpeq
+       super TokenOperator
+end
+
 # The operator `<<=`
 class TLleq
        super TokenOperator
@@ -800,11 +815,31 @@ class TSlash
        super TokenOperator
 end
 
-# The operator `+%
+# The operator `%`
 class TPercent
        super TokenOperator
 end
 
+# The operator `|`
+class TPipe
+       super TokenOperator
+end
+
+# The operator `^`
+class TCaret
+       super TokenOperator
+end
+
+# The operator `&`
+class TAmp
+       super TokenOperator
+end
+
+# The operator `~`
+class TTilde
+       super TokenOperator
+end
+
 # The operator `==`
 class TEq
        super TokenOperator
@@ -860,6 +895,11 @@ class TAt
        super Token
 end
 
+# The symbol `;`
+class TSemi
+       super Token
+end
+
 # A class (or formal type) identifier. They start with an uppercase.
 class TClassid
        super Token
@@ -1102,9 +1142,15 @@ class AStdClassdef
        # The name of the class
        var n_id: nullable TClassid = null is writable
 
+       # The `[` symbol
+       var n_obra: nullable TObra = null is writable
+
        # The list of formal parameter types
        var n_formaldefs = new ANodes[AFormaldef](self)
 
+       # The `]` symbol
+       var n_cbra: nullable TCbra = null is writable
+
        # The extern block code
        var n_extern_code_block: nullable AExternCodeBlock = null is writable
 
@@ -1200,21 +1246,30 @@ end
 class AAttrPropdef
        super APropdef
 
-       # The identifier for a old-style attribute (null if new-style)
+       # The `var` keyword
        var n_kwvar: TKwvar is writable, noinit
 
-       # The identifier for a new-style attribute (null if old-style)
+       # The identifier for a new-style attribute
        var n_id2: TId is writable, noinit
 
        # The declared type of the attribute
        var n_type: nullable AType = null is writable
 
+       # The `=` symbol
+       var n_assign: nullable TAssign = null is writable
+
        # The initial value, if any (set with `=`)
        var n_expr: nullable AExpr = null is writable
 
+       # The `do` keyword
+       var n_kwdo: nullable TKwdo = null is writable
+
        # The initial value, if any (set with `do return`)
        var n_block: nullable AExpr = null is writable
 
+       # The `end` keyword
+       var n_kwend: nullable TKwend = null is writable
+
        redef fun hot_location
        do
                return n_id2.location
@@ -1240,9 +1295,15 @@ class AMethPropdef
        # The signature of the method, if any
        var n_signature: nullable ASignature = null is writable
 
+       # The `do` keyword
+       var n_kwdo: nullable TKwdo = null is writable
+
        # The body (in Nit) of the method, if any
        var n_block: nullable AExpr = null is writable
 
+       # The `end` keyword
+       var n_kwend: nullable TKwend = null is writable
+
        # The list of declared callbacks (for extern methods)
        var n_extern_calls: nullable AExternCalls = null is writable
 
@@ -1425,116 +1486,106 @@ class AIdMethid
        var n_id: TId is writable, noinit
 end
 
-# A method name `+`
-class APlusMethid
+# A method name for an operator
+class AOperatorMethid
        super AMethid
 
-       # The `+` symbol
-       var n_plus: TPlus is writable, noinit
+       # The associated operator symbol
+       var n_op: Token is writable, noinit
+end
+# A method name `+`
+class APlusMethid
+       super AOperatorMethid
 end
 
 # A method name `-`
 class AMinusMethid
-       super AMethid
-
-       # The `-` symbol
-       var n_minus: TMinus is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `*`
 class AStarMethid
-       super AMethid
-
-       # The `*` symbol
-       var n_star: TStar is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `**`
 class AStarstarMethid
-       super AMethid
-
-       # The `**` symbol
-       var n_starstar: TStarstar is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `/`
 class ASlashMethid
-       super AMethid
-
-       # The `/` symbol
-       var n_slash: TSlash is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `%`
 class APercentMethid
-       super AMethid
+       super AOperatorMethid
+end
+
+# A method name `|`
+class APipeMethid
+       super AOperatorMethid
+end
+
+# A method name `^`
+class ACaretMethid
+       super AOperatorMethid
+end
 
-       # The `%` symbol
-       var n_percent: TPercent is writable, noinit
+# A method name `&`
+class AAmpMethid
+       super AOperatorMethid
+end
+
+# A method name `~`
+class ATildeMethid
+       super AOperatorMethid
 end
 
 # A method name `==`
 class AEqMethid
-       super AMethid
-
-       # The `==` symbol
-       var n_eq: TEq is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `!=`
 class ANeMethid
-       super AMethid
-
-       # The `!=` symbol
-       var n_ne: TNe is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `<=`
 class ALeMethid
-       super AMethid
-
-       # The `<=` symbol
-       var n_le: TLe is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `>=`
 class AGeMethid
-       super AMethid
-
-       # The `>=` symbol
-       var n_ge: TGe is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `<`
 class ALtMethid
-       super AMethid
-
-       # The `<` symbol
-       var n_lt: TLt is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `>`
 class AGtMethid
-       super AMethid
-
-       # The `>` symbol
-       var n_gt: TGt is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `<<`
 class ALlMethid
-       super AMethid
-
-       # The `<<` symbol
-       var n_ll: TLl is writable, noinit
+       super AOperatorMethid
 end
 
 # A method name `>>`
 class AGgMethid
-       super AMethid
+       super AOperatorMethid
+end
 
-       # The `>>` symbol
-       var n_gg: TGg is writable, noinit
+# A method name `<=>`
+class AStarshipMethid
+       super AOperatorMethid
 end
 
 # A method name `[]`
@@ -1548,14 +1599,6 @@ class ABraMethid
        var n_cbra: TCbra is writable, noinit
 end
 
-# A method name `<=>`
-class AStarshipMethid
-       super AMethid
-
-       # The `<=>` symbol
-       var n_starship: TStarship is writable, noinit
-end
-
 # A setter method name with a simple identifier (with a `=`)
 class AAssignMethid
        super AMethid
@@ -1621,8 +1664,14 @@ class AType
        # The name of the class or of the formal type
        var n_id: TClassid is writable, noinit
 
+       # The opening bracket
+       var n_obra: nullable TObra = null is writable
+
        # Type arguments for a generic type
        var n_types = new ANodes[AType](self)
+
+       # The closing bracket
+       var n_cbra: nullable TCbra = null is writable
 end
 
 # A label at the end of a block or in a break/continue statement. eg `label x`
@@ -1749,9 +1798,15 @@ class AIfExpr
        # The expression used as the condition of the `if`
        var n_expr: AExpr is writable, noinit
 
+       # The `then` keyword
+       var n_kwthen: TKwthen is writable, noinit
+
        # The body of the `then` part
        var n_then: nullable AExpr = null is writable
 
+       # The `else` keyword
+       var n_kwelse: nullable TKwelse = null is writable
+
        # The body of the `else` part
        var n_else: nullable AExpr = null is writable
 end
@@ -1820,6 +1875,9 @@ class AForExpr
        # The list of name of the automatic variables
        var n_ids = new ANodes[TId](self)
 
+       # The `in` keyword
+       var n_kwin: TKwin is writable, noinit
+
        # The expression used as the collection to iterate on
        var n_expr: AExpr is writable, noinit
 
@@ -1861,6 +1919,9 @@ class AAssertExpr
        # The expression used as the condition of the `assert`
        var n_expr: AExpr is writable, noinit
 
+       # The `else` keyword
+       var n_kwelse: nullable TKwelse = null is writable
+
        # The body to execute when the assert fails
        var n_else: nullable AExpr = null is writable
 end
@@ -2078,20 +2139,51 @@ class APercentExpr
        redef fun operator do return "%"
 end
 
-# A unary minus expression. eg `-x`
-class AUminusExpr
+# A `|` expression
+class APipeExpr
+       super ABinopExpr
+       redef fun operator do return "|"
+end
+
+# A `^` expression
+class ACaretExpr
+       super ABinopExpr
+       redef fun operator do return "^"
+end
+
+# A `&` expression
+class AAmpExpr
+       super ABinopExpr
+       redef fun operator do return "&"
+end
+
+# A unary operation on a method
+class AUnaryopExpr
        super ASendExpr
 
-       # The `-` symbol
-       var n_minus: TMinus is writable, noinit
+       # The operator
+       var n_op: Token is writable, noinit
+
+       # The name of the operator (eg '+')
+       fun operator: String is abstract
+end
+
+# A unary minus expression. eg `-x`
+class AUminusExpr
+       super AUnaryopExpr
+       redef fun operator do return "-"
 end
 
 # A unary plus expression. eg `+x`
 class AUplusExpr
-       super ASendExpr
+       super AUnaryopExpr
+       redef fun operator do return "+"
+end
 
-       # The `+` symbol
-       var n_plus: TPlus is writable, noinit
+# A unary `~` expression
+class AUtildeExpr
+       super AUnaryopExpr
+       redef fun operator do return "~"
 end
 
 # An explicit instantiation. eg `new T`
@@ -2266,7 +2358,10 @@ abstract class ARangeExpr
        # The left (lower) element of the range
        var n_expr: AExpr is writable, noinit
 
-       # The right (uppr) element of the range
+       # The `..`
+       var n_dotdot: TDotdot is writable, noinit
+
+       # The right (upper) element of the range
        var n_expr2: AExpr is writable, noinit
 end
 
@@ -2489,6 +2584,20 @@ class AVarargExpr
        var n_dotdotdot: TDotdotdot is writable, noinit
 end
 
+# An named notation used to pass an expression by name in a parameter
+class ANamedargExpr
+       super AExpr
+
+       # The name of the argument
+       var n_id: TId is writable, noinit
+
+       # The `=` synbol
+       var n_assign: TAssign is writable, noinit
+
+       # The passed expression
+       var n_expr: AExpr is writable, noinit
+end
+
 # A list of expression separated with commas (arguments for instance)
 class AManyExpr
        super AExpr
@@ -2631,6 +2740,27 @@ class AStarstarAssignOp
        redef fun operator do return "**"
 end
 
+# A `|=` assignment operation
+class APipeAssignOp
+       super AAssignOp
+
+       redef fun operator do return "|"
+end
+
+# A `^=` assignment operation
+class ACaretAssignOp
+       super AAssignOp
+
+       redef fun operator do return "^"
+end
+
+# A `&=` assignment operation
+class AAmpAssignOp
+       super AAssignOp
+
+       redef fun operator do return "&"
+end
+
 # A `<<=` assignment operation
 class ALlAssignOp
        super AAssignOp
@@ -2714,6 +2844,9 @@ end
 class AAnnotations
        super Prod
 
+       # The `is` keyword, for *is* annotations
+       var n_kwis: nullable TKwis = null is writable
+
        # The `@` symbol, for *at* annotations
        var n_at: nullable TAt = null is writable
 
@@ -2725,6 +2858,9 @@ class AAnnotations
 
        # The closing parenthesis in *at* annotations
        var n_cpar: nullable TCpar = null is writable
+
+       # The `end` keyword, for *is* annotations
+       var n_kwend: nullable TKwend = null is writable
 end
 
 # A single annotation
index 5ca9042..8743717 100644 (file)
@@ -387,7 +387,9 @@ redef class AStdClassdef
                n_visibility: nullable AVisibility,
                n_classkind: nullable AClasskind,
                n_id: nullable TClassid,
+               n_obra: nullable TObra,
                n_formaldefs: Collection[Object], # Should be Collection[AFormaldef]
+               n_cbra: nullable TCbra,
                n_extern_code_block: nullable AExternCodeBlock,
                n_propdefs: Collection[Object], # Should be Collection[APropdef]
                n_kwend: nullable TKwend
@@ -403,7 +405,11 @@ redef class AStdClassdef
                n_classkind.parent = self
                _n_id = n_id
                if n_id != null then n_id.parent = self
+               _n_obra = n_obra
+               if n_obra != null then n_obra.parent = self
                self.n_formaldefs.unsafe_add_all(n_formaldefs)
+               _n_cbra = n_cbra
+               if n_cbra != null then n_cbra.parent = self
                _n_extern_code_block = n_extern_code_block
                if n_extern_code_block != null then n_extern_code_block.parent = self
                self.n_propdefs.unsafe_add_all(n_propdefs)
@@ -433,7 +439,15 @@ redef class AStdClassdef
                        n_id = new_child.as(nullable TClassid)
                        return
                end
+               if _n_obra == old_child then
+                       n_obra = new_child.as(nullable TObra)
+                       return
+               end
                if n_formaldefs.replace_child(old_child, new_child) then return
+               if _n_cbra == old_child then
+                       n_cbra = new_child.as(nullable TCbra)
+                       return
+               end
                if _n_extern_code_block == old_child then
                        n_extern_code_block = new_child.as(nullable AExternCodeBlock)
                        return
@@ -470,6 +484,16 @@ redef class AStdClassdef
                _n_id = node
                if node != null then node.parent = self
        end
+       redef fun n_obra=(node)
+       do
+               _n_obra = node
+               if node != null then node.parent = self
+       end
+       redef fun n_cbra=(node)
+       do
+               _n_cbra = node
+               if node != null then node.parent = self
+       end
        redef fun n_extern_code_block=(node)
        do
                _n_extern_code_block = node
@@ -489,7 +513,9 @@ redef class AStdClassdef
                v.enter_visit(_n_visibility)
                v.enter_visit(_n_classkind)
                v.enter_visit(_n_id)
+               v.enter_visit(_n_obra)
                n_formaldefs.visit_all(v)
+               v.enter_visit(_n_cbra)
                v.enter_visit(_n_extern_code_block)
                n_propdefs.visit_all(v)
                v.enter_visit(_n_kwend)
@@ -769,9 +795,12 @@ redef class AAttrPropdef
                n_kwvar: nullable TKwvar,
                n_id2: nullable TId,
                n_type: nullable AType,
+               n_assign: nullable TAssign,
                n_expr: nullable AExpr,
                n_annotations: nullable AAnnotations,
-               n_block: nullable AExpr
+               n_kwdo: nullable TKwdo,
+               n_block: nullable AExpr,
+               n_kwend: nullable TKwend
        )
        do
                _n_doc = n_doc
@@ -786,12 +815,18 @@ redef class AAttrPropdef
                n_id2.parent = self
                _n_type = n_type
                if n_type != null then n_type.parent = self
+               _n_assign = n_assign
+               if n_assign != null then n_assign.parent = self
                _n_expr = n_expr
                if n_expr != null then n_expr.parent = self
                _n_annotations = n_annotations
                if n_annotations != null then n_annotations.parent = self
+               _n_kwdo = n_kwdo
+               if n_kwdo != null then n_kwdo.parent = self
                _n_block = n_block
                if n_block != null then n_block.parent = self
+               _n_kwend = n_kwend
+               if n_kwend != null then n_kwend.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -820,6 +855,10 @@ redef class AAttrPropdef
                        n_type = new_child.as(nullable AType)
                        return
                end
+               if _n_assign == old_child then
+                       n_assign = new_child.as(nullable TAssign)
+                       return
+               end
                if _n_expr == old_child then
                        n_expr = new_child.as(nullable AExpr)
                        return
@@ -828,10 +867,18 @@ redef class AAttrPropdef
                        n_annotations = new_child.as(nullable AAnnotations)
                        return
                end
+               if _n_kwdo == old_child then
+                       n_kwdo = new_child.as(nullable TKwdo)
+                       return
+               end
                if _n_block == old_child then
                        n_block = new_child.as(nullable AExpr)
                        return
                end
+               if _n_kwend == old_child then
+                       n_kwend = new_child.as(nullable TKwend)
+                       return
+               end
        end
 
        redef fun n_doc=(node)
@@ -864,6 +911,11 @@ redef class AAttrPropdef
                _n_type = node
                if node != null then node.parent = self
        end
+       redef fun n_assign=(node)
+       do
+               _n_assign = node
+               if node != null then node.parent = self
+       end
        redef fun n_expr=(node)
        do
                _n_expr = node
@@ -874,11 +926,21 @@ redef class AAttrPropdef
                _n_annotations = node
                if node != null then node.parent = self
        end
+       redef fun n_kwdo=(node)
+       do
+               _n_kwdo = node
+               if node != null then node.parent = self
+       end
        redef fun n_block=(node)
        do
                _n_block = node
                if node != null then node.parent = self
        end
+       redef fun n_kwend=(node)
+       do
+               _n_kwend = node
+               if node != null then node.parent = self
+       end
 
 
        redef fun visit_all(v: Visitor)
@@ -889,9 +951,12 @@ redef class AAttrPropdef
                v.enter_visit(_n_kwvar)
                v.enter_visit(_n_id2)
                v.enter_visit(_n_type)
+               v.enter_visit(_n_assign)
                v.enter_visit(_n_expr)
                v.enter_visit(_n_annotations)
+               v.enter_visit(_n_kwdo)
                v.enter_visit(_n_block)
+               v.enter_visit(_n_kwend)
        end
 end
 redef class AMainMethPropdef
@@ -1056,7 +1121,9 @@ redef class AMethPropdef
                n_annotations: nullable AAnnotations,
                n_extern_calls: nullable AExternCalls,
                n_extern_code_block: nullable AExternCodeBlock,
-               n_block: nullable AExpr
+               n_kwdo: nullable TKwdo,
+               n_block: nullable AExpr,
+               n_kwend: nullable TKwend
        )
        do
                _n_doc = n_doc
@@ -1081,8 +1148,12 @@ redef class AMethPropdef
                if n_extern_calls != null then n_extern_calls.parent = self
                _n_extern_code_block = n_extern_code_block
                if n_extern_code_block != null then n_extern_code_block.parent = self
+               _n_kwdo = n_kwdo
+               if n_kwdo != null then n_kwdo.parent = self
                _n_block = n_block
                if n_block != null then n_block.parent = self
+               _n_kwend = n_kwend
+               if n_kwend != null then n_kwend.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -1131,10 +1202,18 @@ redef class AMethPropdef
                        n_extern_code_block = new_child.as(nullable AExternCodeBlock)
                        return
                end
+               if _n_kwdo == old_child then
+                       n_kwdo = new_child.as(nullable TKwdo)
+                       return
+               end
                if _n_block == old_child then
                        n_block = new_child.as(nullable AExpr)
                        return
                end
+               if _n_kwend == old_child then
+                       n_kwend = new_child.as(nullable TKwend)
+                       return
+               end
        end
 
        redef fun n_doc=(node)
@@ -1192,11 +1271,21 @@ redef class AMethPropdef
                _n_extern_code_block = node
                if node != null then node.parent = self
        end
+       redef fun n_kwdo=(node)
+       do
+               _n_kwdo = node
+               if node != null then node.parent = self
+       end
        redef fun n_block=(node)
        do
                _n_block = node
                if node != null then node.parent = self
        end
+       redef fun n_kwend=(node)
+       do
+               _n_kwend = node
+               if node != null then node.parent = self
+       end
 
 
        redef fun visit_all(v: Visitor)
@@ -1212,7 +1301,9 @@ redef class AMethPropdef
                v.enter_visit(_n_annotations)
                v.enter_visit(_n_extern_calls)
                v.enter_visit(_n_extern_code_block)
+               v.enter_visit(_n_kwdo)
                v.enter_visit(_n_block)
+               v.enter_visit(_n_kwend)
        end
 end
 redef class ASuperPropdef
@@ -1451,408 +1542,553 @@ redef class AIdMethid
 end
 redef class APlusMethid
        init init_aplusmethid (
-               n_plus: nullable TPlus
+               n_op: nullable TPlus
        )
        do
-               _n_plus = n_plus.as(not null)
-               n_plus.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_plus == old_child then
-                       n_plus = new_child.as(TPlus)
+               if _n_op == old_child then
+                       n_op = new_child.as(TPlus)
                        return
                end
        end
 
-       redef fun n_plus=(node)
+       redef fun n_op=(node)
        do
-               _n_plus = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_plus)
+               v.enter_visit(_n_op)
        end
 end
 redef class AMinusMethid
        init init_aminusmethid (
-               n_minus: nullable TMinus
+               n_op: nullable TMinus
        )
        do
-               _n_minus = n_minus.as(not null)
-               n_minus.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_minus == old_child then
-                       n_minus = new_child.as(TMinus)
+               if _n_op == old_child then
+                       n_op = new_child.as(TMinus)
                        return
                end
        end
 
-       redef fun n_minus=(node)
+       redef fun n_op=(node)
        do
-               _n_minus = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_minus)
+               v.enter_visit(_n_op)
        end
 end
 redef class AStarMethid
        init init_astarmethid (
-               n_star: nullable TStar
+               n_op: nullable TStar
        )
        do
-               _n_star = n_star.as(not null)
-               n_star.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_star == old_child then
-                       n_star = new_child.as(TStar)
+               if _n_op == old_child then
+                       n_op = new_child.as(TStar)
                        return
                end
        end
 
-       redef fun n_star=(node)
+       redef fun n_op=(node)
        do
-               _n_star = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_star)
+               v.enter_visit(_n_op)
        end
 end
 redef class AStarstarMethid
        init init_astarstarmethid (
-               n_starstar: nullable TStarstar
+               n_op: nullable TStarstar
        )
        do
-               _n_starstar = n_starstar.as(not null)
-               n_starstar.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_starstar == old_child then
-                       n_starstar = new_child.as(TStarstar)
+               if _n_op == old_child then
+                       n_op = new_child.as(TStarstar)
                        return
                end
        end
 
-       redef fun n_starstar=(node)
+       redef fun n_op=(node)
        do
-               _n_starstar = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_starstar)
+               v.enter_visit(_n_op)
        end
 end
 redef class ASlashMethid
        init init_aslashmethid (
-               n_slash: nullable TSlash
+               n_op: nullable TSlash
        )
        do
-               _n_slash = n_slash.as(not null)
-               n_slash.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_slash == old_child then
-                       n_slash = new_child.as(TSlash)
+               if _n_op == old_child then
+                       n_op = new_child.as(TSlash)
                        return
                end
        end
 
-       redef fun n_slash=(node)
+       redef fun n_op=(node)
        do
-               _n_slash = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_slash)
+               v.enter_visit(_n_op)
        end
 end
 redef class APercentMethid
        init init_apercentmethid (
-               n_percent: nullable TPercent
+               n_op: nullable TPercent
        )
        do
-               _n_percent = n_percent.as(not null)
-               n_percent.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_percent == old_child then
-                       n_percent = new_child.as(TPercent)
+               if _n_op == old_child then
+                       n_op = new_child.as(TPercent)
                        return
                end
        end
 
-       redef fun n_percent=(node)
+       redef fun n_op=(node)
        do
-               _n_percent = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_percent)
+               v.enter_visit(_n_op)
        end
 end
 redef class AEqMethid
        init init_aeqmethid (
-               n_eq: nullable TEq
+               n_op: nullable TEq
        )
        do
-               _n_eq = n_eq.as(not null)
-               n_eq.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_eq == old_child then
-                       n_eq = new_child.as(TEq)
+               if _n_op == old_child then
+                       n_op = new_child.as(TEq)
                        return
                end
        end
 
-       redef fun n_eq=(node)
+       redef fun n_op=(node)
        do
-               _n_eq = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_eq)
+               v.enter_visit(_n_op)
        end
 end
 redef class ANeMethid
        init init_anemethid (
-               n_ne: nullable TNe
+               n_op: nullable TNe
        )
        do
-               _n_ne = n_ne.as(not null)
-               n_ne.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_ne == old_child then
-                       n_ne = new_child.as(TNe)
+               if _n_op == old_child then
+                       n_op = new_child.as(TNe)
                        return
                end
        end
 
-       redef fun n_ne=(node)
+       redef fun n_op=(node)
        do
-               _n_ne = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_ne)
+               v.enter_visit(_n_op)
        end
 end
 redef class ALeMethid
        init init_alemethid (
-               n_le: nullable TLe
+               n_op: nullable TLe
        )
        do
-               _n_le = n_le.as(not null)
-               n_le.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_le == old_child then
-                       n_le = new_child.as(TLe)
+               if _n_op == old_child then
+                       n_op = new_child.as(TLe)
                        return
                end
        end
 
-       redef fun n_le=(node)
+       redef fun n_op=(node)
        do
-               _n_le = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_le)
+               v.enter_visit(_n_op)
        end
 end
 redef class AGeMethid
        init init_agemethid (
-               n_ge: nullable TGe
+               n_op: nullable TGe
        )
        do
-               _n_ge = n_ge.as(not null)
-               n_ge.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_ge == old_child then
-                       n_ge = new_child.as(TGe)
+               if _n_op == old_child then
+                       n_op = new_child.as(TGe)
                        return
                end
        end
 
-       redef fun n_ge=(node)
+       redef fun n_op=(node)
        do
-               _n_ge = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_ge)
+               v.enter_visit(_n_op)
        end
 end
 redef class ALtMethid
        init init_altmethid (
-               n_lt: nullable TLt
+               n_op: nullable TLt
        )
        do
-               _n_lt = n_lt.as(not null)
-               n_lt.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_lt == old_child then
-                       n_lt = new_child.as(TLt)
+               if _n_op == old_child then
+                       n_op = new_child.as(TLt)
                        return
                end
        end
 
-       redef fun n_lt=(node)
+       redef fun n_op=(node)
        do
-               _n_lt = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_lt)
+               v.enter_visit(_n_op)
        end
 end
 redef class AGtMethid
        init init_agtmethid (
-               n_gt: nullable TGt
+               n_op: nullable TGt
        )
        do
-               _n_gt = n_gt.as(not null)
-               n_gt.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_gt == old_child then
-                       n_gt = new_child.as(TGt)
+               if _n_op == old_child then
+                       n_op = new_child.as(TGt)
                        return
                end
        end
 
-       redef fun n_gt=(node)
+       redef fun n_op=(node)
        do
-               _n_gt = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_gt)
+               v.enter_visit(_n_op)
        end
 end
 redef class ALlMethid
        init init_allmethid (
-               n_ll: nullable TLl
+               n_op: nullable TLl
        )
        do
-               _n_ll = n_ll.as(not null)
-               n_ll.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_ll == old_child then
-                       n_ll = new_child.as(TLl)
+               if _n_op == old_child then
+                       n_op = new_child.as(TLl)
                        return
                end
        end
 
-       redef fun n_ll=(node)
+       redef fun n_op=(node)
        do
-               _n_ll = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_ll)
+               v.enter_visit(_n_op)
        end
 end
 redef class AGgMethid
        init init_aggmethid (
-               n_gg: nullable TGg
+               n_op: nullable TGg
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TGg)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class AStarshipMethid
+       init init_astarshipmethid (
+               n_op: nullable TStarship
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TStarship)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class APipeMethid
+       init init_apipemethid (
+               n_op: nullable TPipe
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TPipe)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class ACaretMethid
+       init init_acaretmethid (
+               n_op: nullable TCaret
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TCaret)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class AAmpMethid
+       init init_aampmethid (
+               n_op: nullable TAmp
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TAmp)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class ATildeMethid
+       init init_atildemethid (
+               n_op: nullable TTilde
        )
        do
-               _n_gg = n_gg.as(not null)
-               n_gg.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_gg == old_child then
-                       n_gg = new_child.as(TGg)
+               if _n_op == old_child then
+                       n_op = new_child.as(TTilde)
                        return
                end
        end
 
-       redef fun n_gg=(node)
+       redef fun n_op=(node)
        do
-               _n_gg = node
+               _n_op = node
                node.parent = self
        end
 
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_gg)
+               v.enter_visit(_n_op)
        end
 end
 redef class ABraMethid
@@ -1897,35 +2133,6 @@ redef class ABraMethid
                v.enter_visit(_n_cbra)
        end
 end
-redef class AStarshipMethid
-       init init_astarshipmethid (
-               n_starship: nullable TStarship
-       )
-       do
-               _n_starship = n_starship.as(not null)
-               n_starship.parent = self
-       end
-
-       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
-       do
-               if _n_starship == old_child then
-                       n_starship = new_child.as(TStarship)
-                       return
-               end
-       end
-
-       redef fun n_starship=(node)
-       do
-               _n_starship = node
-               node.parent = self
-       end
-
-
-       redef fun visit_all(v: Visitor)
-       do
-               v.enter_visit(_n_starship)
-       end
-end
 redef class AAssignMethid
        init init_aassignmethid (
                n_id: nullable TId,
@@ -2154,7 +2361,9 @@ redef class AType
        init init_atype (
                n_kwnullable: nullable TKwnullable,
                n_id: nullable TClassid,
+               n_obra: nullable TObra,
                n_types: Collection[Object], # Should be Collection[AType]
+               n_cbra: nullable TCbra,
                n_annotations: nullable AAnnotations
        )
        do
@@ -2162,7 +2371,11 @@ redef class AType
                if n_kwnullable != null then n_kwnullable.parent = self
                _n_id = n_id.as(not null)
                n_id.parent = self
+               _n_obra = n_obra
+               if n_obra != null then n_obra.parent = self
                self.n_types.unsafe_add_all(n_types)
+               _n_cbra = n_cbra
+               if n_cbra != null then n_cbra.parent = self
                _n_annotations = n_annotations
                if n_annotations != null then n_annotations.parent = self
        end
@@ -2177,7 +2390,15 @@ redef class AType
                        n_id = new_child.as(TClassid)
                        return
                end
+               if _n_obra == old_child then
+                       n_obra = new_child.as(nullable TObra)
+                       return
+               end
                if n_types.replace_child(old_child, new_child) then return
+               if _n_cbra == old_child then
+                       n_cbra = new_child.as(nullable TCbra)
+                       return
+               end
                if _n_annotations == old_child then
                        n_annotations = new_child.as(nullable AAnnotations)
                        return
@@ -2194,6 +2415,16 @@ redef class AType
                _n_id = node
                node.parent = self
        end
+       redef fun n_obra=(node)
+       do
+               _n_obra = node
+               if node != null then node.parent = self
+       end
+       redef fun n_cbra=(node)
+       do
+               _n_cbra = node
+               if node != null then node.parent = self
+       end
        redef fun n_annotations=(node)
        do
                _n_annotations = node
@@ -2205,7 +2436,9 @@ redef class AType
        do
                v.enter_visit(_n_kwnullable)
                v.enter_visit(_n_id)
+               v.enter_visit(_n_obra)
                n_types.visit_all(v)
+               v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
        end
 end
@@ -2592,7 +2825,9 @@ redef class AIfExpr
        init init_aifexpr (
                n_kwif: nullable TKwif,
                n_expr: nullable AExpr,
+               n_kwthen: nullable TKwthen,
                n_then: nullable AExpr,
+               n_kwelse: nullable TKwelse,
                n_else: nullable AExpr
        )
        do
@@ -2600,8 +2835,12 @@ redef class AIfExpr
                n_kwif.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_kwthen = n_kwthen.as(not null)
+               n_kwthen.parent = self
                _n_then = n_then
                if n_then != null then n_then.parent = self
+               _n_kwelse = n_kwelse
+               if n_kwelse != null then n_kwelse.parent = self
                _n_else = n_else
                if n_else != null then n_else.parent = self
        end
@@ -2616,10 +2855,18 @@ redef class AIfExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_kwthen == old_child then
+                       n_kwthen = new_child.as(TKwthen)
+                       return
+               end
                if _n_then == old_child then
                        n_then = new_child.as(nullable AExpr)
                        return
                end
+               if _n_kwelse == old_child then
+                       n_kwelse = new_child.as(nullable TKwelse)
+                       return
+               end
                if _n_else == old_child then
                        n_else = new_child.as(nullable AExpr)
                        return
@@ -2636,11 +2883,21 @@ redef class AIfExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_kwthen=(node)
+       do
+               _n_kwthen = node
+               node.parent = self
+       end
        redef fun n_then=(node)
        do
                _n_then = node
                if node != null then node.parent = self
        end
+       redef fun n_kwelse=(node)
+       do
+               _n_kwelse = node
+               if node != null then node.parent = self
+       end
        redef fun n_else=(node)
        do
                _n_else = node
@@ -2652,7 +2909,9 @@ redef class AIfExpr
        do
                v.enter_visit(_n_kwif)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_kwthen)
                v.enter_visit(_n_then)
+               v.enter_visit(_n_kwelse)
                v.enter_visit(_n_else)
        end
 end
@@ -2890,6 +3149,7 @@ redef class AForExpr
        init init_aforexpr (
                n_kwfor: nullable TKwfor,
                n_ids: Collection[Object], # Should be Collection[TId]
+               n_kwin: nullable TKwin,
                n_expr: nullable AExpr,
                n_kwdo: nullable TKwdo,
                n_block: nullable AExpr,
@@ -2899,6 +3159,8 @@ redef class AForExpr
                _n_kwfor = n_kwfor.as(not null)
                n_kwfor.parent = self
                self.n_ids.unsafe_add_all(n_ids)
+               _n_kwin = n_kwin.as(not null)
+               n_kwin.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
                _n_kwdo = n_kwdo.as(not null)
@@ -2916,6 +3178,10 @@ redef class AForExpr
                        return
                end
                if n_ids.replace_child(old_child, new_child) then return
+               if _n_kwin == old_child then
+                       n_kwin = new_child.as(TKwin)
+                       return
+               end
                if _n_expr == old_child then
                        n_expr = new_child.as(AExpr)
                        return
@@ -2939,6 +3205,11 @@ redef class AForExpr
                _n_kwfor = node
                node.parent = self
        end
+       redef fun n_kwin=(node)
+       do
+               _n_kwin = node
+               node.parent = self
+       end
        redef fun n_expr=(node)
        do
                _n_expr = node
@@ -2965,6 +3236,7 @@ redef class AForExpr
        do
                v.enter_visit(_n_kwfor)
                n_ids.visit_all(v)
+               v.enter_visit(_n_kwin)
                v.enter_visit(_n_expr)
                v.enter_visit(_n_kwdo)
                v.enter_visit(_n_block)
@@ -3057,6 +3329,7 @@ redef class AAssertExpr
                n_kwassert: nullable TKwassert,
                n_id: nullable TId,
                n_expr: nullable AExpr,
+               n_kwelse: nullable TKwelse,
                n_else: nullable AExpr
        )
        do
@@ -3066,6 +3339,8 @@ redef class AAssertExpr
                if n_id != null then n_id.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_kwelse = n_kwelse
+               if n_kwelse != null then n_kwelse.parent = self
                _n_else = n_else
                if n_else != null then n_else.parent = self
        end
@@ -3084,6 +3359,10 @@ redef class AAssertExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_kwelse == old_child then
+                       n_kwelse = new_child.as(nullable TKwelse)
+                       return
+               end
                if _n_else == old_child then
                        n_else = new_child.as(nullable AExpr)
                        return
@@ -3105,6 +3384,11 @@ redef class AAssertExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_kwelse=(node)
+       do
+               _n_kwelse = node
+               if node != null then node.parent = self
+       end
        redef fun n_else=(node)
        do
                _n_else = node
@@ -3117,6 +3401,7 @@ redef class AAssertExpr
                v.enter_visit(_n_kwassert)
                v.enter_visit(_n_id)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_kwelse)
                v.enter_visit(_n_else)
        end
 end
@@ -4003,10 +4288,175 @@ redef class AIsaExpr
                v.enter_visit(_n_type)
        end
 end
-redef class APlusExpr
-       init init_aplusexpr (
+redef class APlusExpr
+       init init_aplusexpr (
+               n_expr: nullable AExpr,
+               n_op: nullable TPlus,
+               n_expr2: nullable AExpr
+       )
+       do
+               _n_expr = n_expr.as(not null)
+               n_expr.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+               _n_expr2 = n_expr2.as(not null)
+               n_expr2.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_expr == old_child then
+                       n_expr = new_child.as(AExpr)
+                       return
+               end
+               if _n_op == old_child then
+                       n_op = new_child.as(TPlus)
+                       return
+               end
+               if _n_expr2 == old_child then
+                       n_expr2 = new_child.as(AExpr)
+                       return
+               end
+       end
+
+       redef fun n_expr=(node)
+       do
+               _n_expr = node
+               node.parent = self
+       end
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+       redef fun n_expr2=(node)
+       do
+               _n_expr2 = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_expr)
+               v.enter_visit(_n_op)
+               v.enter_visit(_n_expr2)
+       end
+end
+redef class AMinusExpr
+       init init_aminusexpr (
+               n_expr: nullable AExpr,
+               n_op: nullable TMinus,
+               n_expr2: nullable AExpr
+       )
+       do
+               _n_expr = n_expr.as(not null)
+               n_expr.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+               _n_expr2 = n_expr2.as(not null)
+               n_expr2.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_expr == old_child then
+                       n_expr = new_child.as(AExpr)
+                       return
+               end
+               if _n_op == old_child then
+                       n_op = new_child.as(TMinus)
+                       return
+               end
+               if _n_expr2 == old_child then
+                       n_expr2 = new_child.as(AExpr)
+                       return
+               end
+       end
+
+       redef fun n_expr=(node)
+       do
+               _n_expr = node
+               node.parent = self
+       end
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+       redef fun n_expr2=(node)
+       do
+               _n_expr2 = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_expr)
+               v.enter_visit(_n_op)
+               v.enter_visit(_n_expr2)
+       end
+end
+redef class AStarshipExpr
+       init init_astarshipexpr (
+               n_expr: nullable AExpr,
+               n_op: nullable TStarship,
+               n_expr2: nullable AExpr
+       )
+       do
+               _n_expr = n_expr.as(not null)
+               n_expr.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+               _n_expr2 = n_expr2.as(not null)
+               n_expr2.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_expr == old_child then
+                       n_expr = new_child.as(AExpr)
+                       return
+               end
+               if _n_op == old_child then
+                       n_op = new_child.as(TStarship)
+                       return
+               end
+               if _n_expr2 == old_child then
+                       n_expr2 = new_child.as(AExpr)
+                       return
+               end
+       end
+
+       redef fun n_expr=(node)
+       do
+               _n_expr = node
+               node.parent = self
+       end
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+       redef fun n_expr2=(node)
+       do
+               _n_expr2 = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_expr)
+               v.enter_visit(_n_op)
+               v.enter_visit(_n_expr2)
+       end
+end
+redef class AStarExpr
+       init init_astarexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TPlus,
+               n_op: nullable TStar,
                n_expr2: nullable AExpr
        )
        do
@@ -4025,7 +4475,7 @@ redef class APlusExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TPlus)
+                       n_op = new_child.as(TStar)
                        return
                end
                if _n_expr2 == old_child then
@@ -4058,10 +4508,10 @@ redef class APlusExpr
                v.enter_visit(_n_expr2)
        end
 end
-redef class AMinusExpr
-       init init_aminusexpr (
+redef class AStarstarExpr
+       init init_astarstarexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TMinus,
+               n_op: nullable TStarstar,
                n_expr2: nullable AExpr
        )
        do
@@ -4080,7 +4530,7 @@ redef class AMinusExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TMinus)
+                       n_op = new_child.as(TStarstar)
                        return
                end
                if _n_expr2 == old_child then
@@ -4113,10 +4563,10 @@ redef class AMinusExpr
                v.enter_visit(_n_expr2)
        end
 end
-redef class AStarshipExpr
-       init init_astarshipexpr (
+redef class ASlashExpr
+       init init_aslashexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TStarship,
+               n_op: nullable TSlash,
                n_expr2: nullable AExpr
        )
        do
@@ -4135,7 +4585,7 @@ redef class AStarshipExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TStarship)
+                       n_op = new_child.as(TSlash)
                        return
                end
                if _n_expr2 == old_child then
@@ -4168,10 +4618,10 @@ redef class AStarshipExpr
                v.enter_visit(_n_expr2)
        end
 end
-redef class AStarExpr
-       init init_astarexpr (
+redef class APercentExpr
+       init init_apercentexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TStar,
+               n_op: nullable TPercent,
                n_expr2: nullable AExpr
        )
        do
@@ -4190,7 +4640,7 @@ redef class AStarExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TStar)
+                       n_op = new_child.as(TPercent)
                        return
                end
                if _n_expr2 == old_child then
@@ -4223,10 +4673,10 @@ redef class AStarExpr
                v.enter_visit(_n_expr2)
        end
 end
-redef class AStarstarExpr
-       init init_astarstarexpr (
+redef class APipeExpr
+       init init_apipeexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TStarstar,
+               n_op: nullable TPipe,
                n_expr2: nullable AExpr
        )
        do
@@ -4245,7 +4695,7 @@ redef class AStarstarExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TStarstar)
+                       n_op = new_child.as(TPipe)
                        return
                end
                if _n_expr2 == old_child then
@@ -4278,10 +4728,10 @@ redef class AStarstarExpr
                v.enter_visit(_n_expr2)
        end
 end
-redef class ASlashExpr
-       init init_aslashexpr (
+redef class ACaretExpr
+       init init_acaretexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TSlash,
+               n_op: nullable TCaret,
                n_expr2: nullable AExpr
        )
        do
@@ -4300,7 +4750,7 @@ redef class ASlashExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TSlash)
+                       n_op = new_child.as(TCaret)
                        return
                end
                if _n_expr2 == old_child then
@@ -4333,10 +4783,10 @@ redef class ASlashExpr
                v.enter_visit(_n_expr2)
        end
 end
-redef class APercentExpr
-       init init_apercentexpr (
+redef class AAmpExpr
+       init init_aampexpr (
                n_expr: nullable AExpr,
-               n_op: nullable TPercent,
+               n_op: nullable TAmp,
                n_expr2: nullable AExpr
        )
        do
@@ -4355,7 +4805,7 @@ redef class APercentExpr
                        return
                end
                if _n_op == old_child then
-                       n_op = new_child.as(TPercent)
+                       n_op = new_child.as(TAmp)
                        return
                end
                if _n_expr2 == old_child then
@@ -4390,20 +4840,20 @@ redef class APercentExpr
 end
 redef class AUminusExpr
        init init_auminusexpr (
-               n_minus: nullable TMinus,
+               n_op: nullable TMinus,
                n_expr: nullable AExpr
        )
        do
-               _n_minus = n_minus.as(not null)
-               n_minus.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_minus == old_child then
-                       n_minus = new_child.as(TMinus)
+               if _n_op == old_child then
+                       n_op = new_child.as(TMinus)
                        return
                end
                if _n_expr == old_child then
@@ -4412,9 +4862,9 @@ redef class AUminusExpr
                end
        end
 
-       redef fun n_minus=(node)
+       redef fun n_op=(node)
        do
-               _n_minus = node
+               _n_op = node
                node.parent = self
        end
        redef fun n_expr=(node)
@@ -4426,26 +4876,68 @@ redef class AUminusExpr
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_minus)
+               v.enter_visit(_n_op)
                v.enter_visit(_n_expr)
        end
 end
 redef class AUplusExpr
        init init_auplusexpr (
-               n_plus: nullable TPlus,
+               n_op: nullable TPlus,
+               n_expr: nullable AExpr
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+               _n_expr = n_expr.as(not null)
+               n_expr.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TPlus)
+                       return
+               end
+               if _n_expr == old_child then
+                       n_expr = new_child.as(AExpr)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+       redef fun n_expr=(node)
+       do
+               _n_expr = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+               v.enter_visit(_n_expr)
+       end
+end
+redef class AUtildeExpr
+       init init_autildeexpr (
+               n_op: nullable TTilde,
                n_expr: nullable AExpr
        )
        do
-               _n_plus = n_plus.as(not null)
-               n_plus.parent = self
+               _n_op = n_op.as(not null)
+               n_op.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
-               if _n_plus == old_child then
-                       n_plus = new_child.as(TPlus)
+               if _n_op == old_child then
+                       n_op = new_child.as(TTilde)
                        return
                end
                if _n_expr == old_child then
@@ -4454,9 +4946,9 @@ redef class AUplusExpr
                end
        end
 
-       redef fun n_plus=(node)
+       redef fun n_op=(node)
        do
-               _n_plus = node
+               _n_op = node
                node.parent = self
        end
        redef fun n_expr=(node)
@@ -4468,7 +4960,7 @@ redef class AUplusExpr
 
        redef fun visit_all(v: Visitor)
        do
-               v.enter_visit(_n_plus)
+               v.enter_visit(_n_op)
                v.enter_visit(_n_expr)
        end
 end
@@ -5421,6 +5913,7 @@ redef class ACrangeExpr
        init init_acrangeexpr (
                n_obra: nullable TObra,
                n_expr: nullable AExpr,
+               n_dotdot: nullable TDotdot,
                n_expr2: nullable AExpr,
                n_cbra: nullable TCbra,
                n_annotations: nullable AAnnotations
@@ -5430,6 +5923,8 @@ redef class ACrangeExpr
                n_obra.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_dotdot = n_dotdot.as(not null)
+               n_dotdot.parent = self
                _n_expr2 = n_expr2.as(not null)
                n_expr2.parent = self
                _n_cbra = n_cbra.as(not null)
@@ -5448,6 +5943,10 @@ redef class ACrangeExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_dotdot == old_child then
+                       n_dotdot = new_child.as(TDotdot)
+                       return
+               end
                if _n_expr2 == old_child then
                        n_expr2 = new_child.as(AExpr)
                        return
@@ -5472,6 +5971,11 @@ redef class ACrangeExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_dotdot=(node)
+       do
+               _n_dotdot = node
+               node.parent = self
+       end
        redef fun n_expr2=(node)
        do
                _n_expr2 = node
@@ -5493,6 +5997,7 @@ redef class ACrangeExpr
        do
                v.enter_visit(_n_obra)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_dotdot)
                v.enter_visit(_n_expr2)
                v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
@@ -5502,6 +6007,7 @@ redef class AOrangeExpr
        init init_aorangeexpr (
                n_obra: nullable TObra,
                n_expr: nullable AExpr,
+               n_dotdot: nullable TDotdot,
                n_expr2: nullable AExpr,
                n_cbra: nullable TObra,
                n_annotations: nullable AAnnotations
@@ -5511,6 +6017,8 @@ redef class AOrangeExpr
                n_obra.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_dotdot = n_dotdot.as(not null)
+               n_dotdot.parent = self
                _n_expr2 = n_expr2.as(not null)
                n_expr2.parent = self
                _n_cbra = n_cbra.as(not null)
@@ -5529,6 +6037,10 @@ redef class AOrangeExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_dotdot == old_child then
+                       n_dotdot = new_child.as(TDotdot)
+                       return
+               end
                if _n_expr2 == old_child then
                        n_expr2 = new_child.as(AExpr)
                        return
@@ -5553,6 +6065,11 @@ redef class AOrangeExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_dotdot=(node)
+       do
+               _n_dotdot = node
+               node.parent = self
+       end
        redef fun n_expr2=(node)
        do
                _n_expr2 = node
@@ -5574,6 +6091,7 @@ redef class AOrangeExpr
        do
                v.enter_visit(_n_obra)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_dotdot)
                v.enter_visit(_n_expr2)
                v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
@@ -6572,6 +7090,61 @@ redef class AVarargExpr
                v.enter_visit(_n_dotdotdot)
        end
 end
+redef class ANamedargExpr
+       init init_anamedargexpr (
+               n_id: nullable TId,
+               n_assign: nullable TAssign,
+               n_expr: nullable AExpr
+       )
+       do
+               _n_id = n_id.as(not null)
+               n_id.parent = self
+               _n_assign = n_assign.as(not null)
+               n_assign.parent = self
+               _n_expr = n_expr.as(not null)
+               n_expr.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_id == old_child then
+                       n_id = new_child.as(TId)
+                       return
+               end
+               if _n_assign == old_child then
+                       n_assign = new_child.as(TAssign)
+                       return
+               end
+               if _n_expr == old_child then
+                       n_expr = new_child.as(AExpr)
+                       return
+               end
+       end
+
+       redef fun n_id=(node)
+       do
+               _n_id = node
+               node.parent = self
+       end
+       redef fun n_assign=(node)
+       do
+               _n_assign = node
+               node.parent = self
+       end
+       redef fun n_expr=(node)
+       do
+               _n_expr = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_id)
+               v.enter_visit(_n_assign)
+               v.enter_visit(_n_expr)
+       end
+end
 redef class ATypeExpr
        init init_atypeexpr (
                n_type: nullable AType
@@ -6978,6 +7551,93 @@ redef class AStarstarAssignOp
                v.enter_visit(_n_op)
        end
 end
+redef class APipeAssignOp
+       init init_apipeassignop (
+               n_op: nullable TPipeeq
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TPipeeq)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class ACaretAssignOp
+       init init_acaretassignop (
+               n_op: nullable TCareteq
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TCareteq)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
+redef class AAmpAssignOp
+       init init_aampassignop (
+               n_op: nullable TAmpeq
+       )
+       do
+               _n_op = n_op.as(not null)
+               n_op.parent = self
+       end
+
+       redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+       do
+               if _n_op == old_child then
+                       n_op = new_child.as(TAmpeq)
+                       return
+               end
+       end
+
+       redef fun n_op=(node)
+       do
+               _n_op = node
+               node.parent = self
+       end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+               v.enter_visit(_n_op)
+       end
+end
 redef class ALlAssignOp
        init init_allassignop (
                n_op: nullable TLleq
@@ -7602,12 +8262,16 @@ redef class ADoc
 end
 redef class AAnnotations
        init init_aannotations (
+               n_kwis: nullable TKwis,
                n_at: nullable TAt,
                n_opar: nullable TOpar,
                n_items: Collection[Object], # Should be Collection[AAnnotation]
-               n_cpar: nullable TCpar
+               n_cpar: nullable TCpar,
+               n_kwend: nullable TKwend
        )
        do
+               _n_kwis = n_kwis
+               if n_kwis != null then n_kwis.parent = self
                _n_at = n_at
                if n_at != null then n_at.parent = self
                _n_opar = n_opar
@@ -7615,10 +8279,16 @@ redef class AAnnotations
                self.n_items.unsafe_add_all(n_items)
                _n_cpar = n_cpar
                if n_cpar != null then n_cpar.parent = self
+               _n_kwend = n_kwend
+               if n_kwend != null then n_kwend.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
+               if _n_kwis == old_child then
+                       n_kwis = new_child.as(nullable TKwis)
+                       return
+               end
                if _n_at == old_child then
                        n_at = new_child.as(nullable TAt)
                        return
@@ -7632,8 +8302,17 @@ redef class AAnnotations
                        n_cpar = new_child.as(nullable TCpar)
                        return
                end
+               if _n_kwend == old_child then
+                       n_kwend = new_child.as(nullable TKwend)
+                       return
+               end
        end
 
+       redef fun n_kwis=(node)
+       do
+               _n_kwis = node
+               if node != null then node.parent = self
+       end
        redef fun n_at=(node)
        do
                _n_at = node
@@ -7649,14 +8328,21 @@ redef class AAnnotations
                _n_cpar = node
                if node != null then node.parent = self
        end
+       redef fun n_kwend=(node)
+       do
+               _n_kwend = node
+               if node != null then node.parent = self
+       end
 
 
        redef fun visit_all(v: Visitor)
        do
+               v.enter_visit(_n_kwis)
                v.enter_visit(_n_at)
                v.enter_visit(_n_opar)
                n_items.visit_all(v)
                v.enter_visit(_n_cpar)
+               v.enter_visit(_n_kwend)
        end
 end
 redef class AAnnotation
index 97cd793..eb77663 100644 (file)
@@ -3,7 +3,7 @@
 #include "tables_nit.h"
 
 static const int lexer_goto_row1[] = {
-       52,
+       57,
        9, 9, 1,
        10, 10, 2,
        13, 13, 3,
@@ -12,50 +12,55 @@ static const int lexer_goto_row1[] = {
        34, 34, 6,
        35, 35, 7,
        37, 37, 8,
-       39, 39, 9,
-       40, 40, 10,
-       41, 41, 11,
-       42, 42, 12,
-       43, 43, 13,
-       44, 44, 14,
-       45, 45, 15,
-       46, 46, 16,
-       47, 47, 17,
-       48, 48, 18,
-       49, 57, 19,
-       58, 58, 20,
-       60, 60, 21,
-       61, 61, 22,
-       62, 62, 23,
-       64, 64, 24,
-       65, 90, 25,
-       91, 91, 26,
-       93, 93, 27,
-       95, 95, 28,
-       96, 96, 29,
-       97, 97, 30,
-       98, 98, 31,
-       99, 99, 32,
-       100, 100, 33,
-       101, 101, 34,
-       102, 102, 35,
-       103, 104, 36,
-       105, 105, 37,
-       106, 107, 36,
-       108, 108, 38,
-       109, 109, 39,
-       110, 110, 40,
-       111, 111, 41,
-       112, 112, 42,
-       113, 113, 36,
-       114, 114, 43,
-       115, 115, 44,
-       116, 116, 45,
-       117, 117, 46,
-       118, 118, 47,
-       119, 119, 48,
-       120, 122, 36,
-       125, 125, 49
+       38, 38, 9,
+       39, 39, 10,
+       40, 40, 11,
+       41, 41, 12,
+       42, 42, 13,
+       43, 43, 14,
+       44, 44, 15,
+       45, 45, 16,
+       46, 46, 17,
+       47, 47, 18,
+       48, 48, 19,
+       49, 57, 20,
+       58, 58, 21,
+       59, 59, 22,
+       60, 60, 23,
+       61, 61, 24,
+       62, 62, 25,
+       64, 64, 26,
+       65, 90, 27,
+       91, 91, 28,
+       93, 93, 29,
+       94, 94, 30,
+       95, 95, 31,
+       96, 96, 32,
+       97, 97, 33,
+       98, 98, 34,
+       99, 99, 35,
+       100, 100, 36,
+       101, 101, 37,
+       102, 102, 38,
+       103, 104, 39,
+       105, 105, 40,
+       106, 107, 39,
+       108, 108, 41,
+       109, 109, 42,
+       110, 110, 43,
+       111, 111, 44,
+       112, 112, 45,
+       113, 113, 39,
+       114, 114, 46,
+       115, 115, 47,
+       116, 116, 48,
+       117, 117, 49,
+       118, 118, 50,
+       119, 119, 51,
+       120, 122, 39,
+       124, 124, 52,
+       125, 125, 53,
+       126, 126, 54
 };
 static const int lexer_goto_row2[] = {
        2,
@@ -64,7 +69,7 @@ static const int lexer_goto_row2[] = {
 };
 static const int lexer_goto_row4[] = {
        1,
-       10, 10, 50
+       10, 10, 55
 };
 static const int lexer_goto_row5[] = {
        1,
@@ -72,1827 +77,1839 @@ static const int lexer_goto_row5[] = {
 };
 static const int lexer_goto_row6[] = {
        1,
-       61, 61, 51
+       61, 61, 56
 };
 static const int lexer_goto_row7[] = {
        9,
-       0, 9, 52,
-       11, 12, 52,
-       14, 33, 52,
-       34, 34, 53,
-       35, 91, 52,
-       92, 92, 54,
-       93, 122, 52,
-       123, 123, 55,
-       124, 255, 52
+       0, 9, 57,
+       11, 12, 57,
+       14, 33, 57,
+       34, 34, 58,
+       35, 91, 57,
+       92, 92, 59,
+       93, 122, 57,
+       123, 123, 60,
+       124, 255, 57
 };
 static const int lexer_goto_row8[] = {
        5,
-       0, 9, 56,
-       10, 10, 57,
-       11, 12, 56,
-       13, 13, 58,
-       14, 255, 56
+       0, 9, 61,
+       10, 10, 62,
+       11, 12, 61,
+       13, 13, 63,
+       14, 255, 61
 };
 static const int lexer_goto_row9[] = {
        1,
-       61, 61, 59
+       61, 61, 64
 };
 static const int lexer_goto_row10[] = {
-       7,
-       0, 9, 60,
-       11, 12, 60,
-       14, 38, 60,
-       39, 39, 61,
-       40, 91, 60,
-       92, 92, 62,
-       93, 255, 60
+       1,
+       61, 61, 65
 };
-static const int lexer_goto_row13[] = {
-       2,
-       42, 42, 63,
-       61, 61, 64
+static const int lexer_goto_row11[] = {
+       7,
+       0, 9, 66,
+       11, 12, 66,
+       14, 38, 66,
+       39, 39, 67,
+       40, 91, 66,
+       92, 92, 68,
+       93, 255, 66
 };
 static const int lexer_goto_row14[] = {
-       1,
-       61, 61, 65
+       2,
+       42, 42, 69,
+       61, 61, 70
 };
-static const int lexer_goto_row16[] = {
+static const int lexer_goto_row15[] = {
        1,
-       61, 61, 66
+       61, 61, 71
 };
 static const int lexer_goto_row17[] = {
-       2,
-       46, 46, 67,
-       48, 57, 68
+       1,
+       61, 61, 72
 };
 static const int lexer_goto_row18[] = {
-       1,
-       61, 61, 69
+       2,
+       46, 46, 73,
+       48, 57, 74
 };
 static const int lexer_goto_row19[] = {
-       4,
-       46, 46, 70,
-       48, 57, 19,
-       88, 88, 71,
-       120, 120, 72
+       1,
+       61, 61, 75
 };
 static const int lexer_goto_row20[] = {
-       1,
-       46, 57, -20
+       4,
+       46, 46, 76,
+       48, 57, 20,
+       88, 88, 77,
+       120, 120, 78
 };
 static const int lexer_goto_row21[] = {
        1,
-       58, 58, 73
+       46, 57, -21
 };
 static const int lexer_goto_row22[] = {
-       2,
-       60, 60, 74,
-       61, 61, 75
-};
-static const int lexer_goto_row23[] = {
        1,
-       61, 61, 76
+       58, 58, 79
 };
 static const int lexer_goto_row24[] = {
        2,
-       61, 61, 77,
-       62, 62, 78
+       60, 60, 80,
+       61, 61, 81
 };
-static const int lexer_goto_row26[] = {
-       4,
-       48, 57, 79,
-       65, 90, 80,
-       95, 95, 81,
-       97, 122, 82
+static const int lexer_goto_row25[] = {
+       1,
+       61, 61, 82
 };
-static const int lexer_goto_row29[] = {
+static const int lexer_goto_row26[] = {
        2,
-       95, 95, 83,
-       97, 122, 84
+       61, 61, 83,
+       62, 62, 84
 };
-static const int lexer_goto_row30[] = {
-       1,
-       123, 123, 85
+static const int lexer_goto_row28[] = {
+       4,
+       48, 57, 85,
+       65, 90, 86,
+       95, 95, 87,
+       97, 122, 88
 };
 static const int lexer_goto_row31[] = {
-       10,
-       48, 57, 86,
-       65, 90, 87,
-       95, 95, 88,
-       97, 97, 89,
-       98, 98, 90,
-       99, 109, 89,
-       110, 110, 91,
-       111, 114, 89,
-       115, 115, 92,
-       116, 122, 89
+       1,
+       61, 61, 89
 };
 static const int lexer_goto_row32[] = {
-       4,
-       48, 95, -32,
-       97, 113, 89,
-       114, 114, 93,
-       115, 122, 89
+       2,
+       95, 95, 90,
+       97, 122, 91
 };
 static const int lexer_goto_row33[] = {
-       6,
-       48, 95, -32,
-       97, 107, 89,
-       108, 108, 94,
-       109, 110, 89,
-       111, 111, 95,
-       112, 122, 89
+       1,
+       123, 123, 92
 };
 static const int lexer_goto_row34[] = {
-       4,
-       48, 95, -32,
-       97, 110, 89,
-       111, 111, 96,
-       112, 122, 89
+       10,
+       48, 57, 93,
+       65, 90, 94,
+       95, 95, 95,
+       97, 97, 96,
+       98, 98, 97,
+       99, 109, 96,
+       110, 110, 98,
+       111, 114, 96,
+       115, 115, 99,
+       116, 122, 96
 };
 static const int lexer_goto_row35[] = {
-       7,
-       48, 107, -34,
-       108, 108, 97,
-       109, 109, 89,
-       110, 110, 98,
-       111, 119, 89,
-       120, 120, 99,
-       121, 122, 89
+       4,
+       48, 95, -35,
+       97, 113, 96,
+       114, 114, 100,
+       115, 122, 96
 };
 static const int lexer_goto_row36[] = {
-       7,
-       48, 95, -32,
-       97, 97, 100,
-       98, 110, 89,
-       111, 111, 101,
-       112, 116, 89,
-       117, 117, 102,
-       118, 122, 89
+       6,
+       48, 95, -35,
+       97, 107, 96,
+       108, 108, 101,
+       109, 110, 96,
+       111, 111, 102,
+       112, 122, 96
 };
 static const int lexer_goto_row37[] = {
-       2,
-       48, 95, -32,
-       97, 122, 89
+       4,
+       48, 95, -35,
+       97, 110, 96,
+       111, 111, 103,
+       112, 122, 96
 };
 static const int lexer_goto_row38[] = {
-       9,
-       48, 95, -32,
-       97, 101, 89,
-       102, 102, 103,
-       103, 108, 89,
-       109, 109, 104,
+       7,
+       48, 107, -37,
+       108, 108, 104,
+       109, 109, 96,
        110, 110, 105,
-       111, 114, 89,
-       115, 115, 106,
-       116, 122, 89
+       111, 119, 96,
+       120, 120, 106,
+       121, 122, 96
 };
 static const int lexer_goto_row39[] = {
-       5,
-       48, 95, -32,
+       7,
+       48, 95, -35,
        97, 97, 107,
-       98, 110, 89,
+       98, 110, 96,
        111, 111, 108,
-       112, 122, 89
+       112, 116, 96,
+       117, 117, 109,
+       118, 122, 96
 };
 static const int lexer_goto_row40[] = {
-       3,
-       48, 110, -35,
-       111, 111, 109,
-       112, 122, 89
+       2,
+       48, 95, -35,
+       97, 122, 96
 };
 static const int lexer_goto_row41[] = {
-       8,
-       48, 95, -32,
-       97, 100, 89,
-       101, 101, 110,
-       102, 110, 89,
-       111, 111, 111,
-       112, 116, 89,
-       117, 117, 112,
-       118, 122, 89
+       9,
+       48, 95, -35,
+       97, 101, 96,
+       102, 102, 110,
+       103, 108, 96,
+       109, 109, 111,
+       110, 110, 112,
+       111, 114, 96,
+       115, 115, 113,
+       116, 122, 96
 };
 static const int lexer_goto_row42[] = {
-       6,
-       48, 95, -32,
-       97, 109, 89,
-       110, 110, 113,
-       111, 113, 89,
-       114, 114, 114,
-       115, 122, 89
+       5,
+       48, 95, -35,
+       97, 97, 114,
+       98, 110, 96,
+       111, 111, 115,
+       112, 122, 96
 };
 static const int lexer_goto_row43[] = {
-       7,
-       48, 95, -32,
-       97, 97, 115,
-       98, 113, 89,
-       114, 114, 116,
-       115, 116, 89,
-       117, 117, 117,
-       118, 122, 89
+       3,
+       48, 110, -38,
+       111, 111, 116,
+       112, 122, 96
 };
 static const int lexer_goto_row44[] = {
-       3,
-       48, 100, -42,
-       101, 101, 118,
-       102, 122, 89
+       8,
+       48, 95, -35,
+       97, 100, 96,
+       101, 101, 117,
+       102, 110, 96,
+       111, 111, 118,
+       112, 116, 96,
+       117, 117, 119,
+       118, 122, 96
 };
 static const int lexer_goto_row45[] = {
-       5,
-       48, 100, -42,
-       101, 101, 119,
-       102, 116, 89,
-       117, 117, 120,
-       118, 122, 89
+       6,
+       48, 95, -35,
+       97, 109, 96,
+       110, 110, 120,
+       111, 113, 96,
+       114, 114, 121,
+       115, 122, 96
 };
 static const int lexer_goto_row46[] = {
-       8,
-       48, 95, -32,
-       97, 103, 89,
-       104, 104, 121,
-       105, 113, 89,
-       114, 114, 122,
-       115, 120, 89,
-       121, 121, 123,
-       122, 122, 89
+       7,
+       48, 95, -35,
+       97, 97, 122,
+       98, 113, 96,
+       114, 114, 123,
+       115, 116, 96,
+       117, 117, 124,
+       118, 122, 96
 };
 static const int lexer_goto_row47[] = {
        3,
-       48, 109, -43,
-       110, 110, 124,
-       111, 122, 89
+       48, 100, -45,
+       101, 101, 125,
+       102, 122, 96
 };
 static const int lexer_goto_row48[] = {
-       3,
-       48, 95, -32,
-       97, 97, 125,
-       98, 122, 89
+       5,
+       48, 100, -45,
+       101, 101, 126,
+       102, 116, 96,
+       117, 117, 127,
+       118, 122, 96
 };
 static const int lexer_goto_row49[] = {
-       4,
-       48, 103, -47,
-       104, 104, 126,
-       105, 105, 127,
-       106, 122, 89
+       8,
+       48, 95, -35,
+       97, 103, 96,
+       104, 104, 128,
+       105, 113, 96,
+       114, 114, 129,
+       115, 120, 96,
+       121, 121, 130,
+       122, 122, 96
 };
 static const int lexer_goto_row50[] = {
-       11,
-       0, 9, 128,
-       11, 12, 128,
-       14, 33, 128,
-       34, 34, 129,
-       35, 91, 128,
-       92, 92, 130,
-       93, 122, 128,
-       123, 123, 131,
-       124, 124, 128,
-       125, 125, 132,
-       126, 255, 128
+       3,
+       48, 109, -46,
+       110, 110, 131,
+       111, 122, 96
 };
-static const int lexer_goto_row53[] = {
+static const int lexer_goto_row51[] = {
        3,
-       0, 33, -8,
-       34, 34, 133,
-       35, 255, -8
+       48, 95, -35,
+       97, 97, 132,
+       98, 122, 96
 };
-static const int lexer_goto_row54[] = {
+static const int lexer_goto_row52[] = {
+       4,
+       48, 103, -50,
+       104, 104, 133,
+       105, 105, 134,
+       106, 122, 96
+};
+static const int lexer_goto_row53[] = {
        1,
-       34, 34, 134
+       61, 61, 135
 };
-static const int lexer_goto_row55[] = {
+static const int lexer_goto_row54[] = {
+       11,
+       0, 9, 136,
+       11, 12, 136,
+       14, 33, 136,
+       34, 34, 137,
+       35, 91, 136,
+       92, 92, 138,
+       93, 122, 136,
+       123, 123, 139,
+       124, 124, 136,
+       125, 125, 140,
+       126, 255, 136
+};
+static const int lexer_goto_row58[] = {
        3,
-       0, 9, 135,
-       11, 12, 135,
-       14, 255, 135
-};
-static const int lexer_goto_row57[] = {
-       1,
-       0, 255, -9
+       0, 33, -8,
+       34, 34, 141,
+       35, 255, -8
 };
 static const int lexer_goto_row59[] = {
        1,
-       10, 10, 136
+       34, 34, 142
 };
-static const int lexer_goto_row61[] = {
-       1,
-       39, 39, 137
+static const int lexer_goto_row60[] = {
+       3,
+       0, 9, 143,
+       11, 12, 143,
+       14, 255, 143
 };
 static const int lexer_goto_row62[] = {
        1,
-       39, 39, 138
-};
-static const int lexer_goto_row63[] = {
-       3,
-       0, 9, 139,
-       11, 12, 139,
-       14, 255, 139
+       0, 255, -9
 };
 static const int lexer_goto_row64[] = {
        1,
-       61, 61, 140
+       10, 10, 144
+};
+static const int lexer_goto_row67[] = {
+       1,
+       39, 39, 145
 };
 static const int lexer_goto_row68[] = {
        1,
-       46, 46, 141
+       39, 39, 146
 };
 static const int lexer_goto_row69[] = {
-       1,
-       48, 57, 68
+       3,
+       0, 9, 147,
+       11, 12, 147,
+       14, 255, 147
 };
-static const int lexer_goto_row71[] = {
+static const int lexer_goto_row70[] = {
        1,
-       48, 57, 68
+       61, 61, 148
 };
-static const int lexer_goto_row72[] = {
-       3,
-       48, 57, 142,
-       65, 70, 143,
-       97, 102, 144
-};
-static const int lexer_goto_row73[] = {
+static const int lexer_goto_row74[] = {
        1,
-       48, 102, -73
+       46, 46, 149
 };
 static const int lexer_goto_row75[] = {
        1,
-       61, 61, 145
+       48, 57, 74
 };
-static const int lexer_goto_row76[] = {
+static const int lexer_goto_row77[] = {
        1,
-       62, 62, 146
+       48, 57, 74
 };
-static const int lexer_goto_row79[] = {
-       1,
-       61, 61, 147
+static const int lexer_goto_row78[] = {
+       3,
+       48, 57, 150,
+       65, 70, 151,
+       97, 102, 152
 };
-static const int lexer_goto_row80[] = {
+static const int lexer_goto_row79[] = {
        1,
-       48, 122, -27
+       48, 102, -79
 };
 static const int lexer_goto_row81[] = {
        1,
-       48, 122, -27
+       61, 61, 153
 };
 static const int lexer_goto_row82[] = {
        1,
-       48, 122, -27
-};
-static const int lexer_goto_row83[] = {
-       1,
-       48, 122, -27
-};
-static const int lexer_goto_row84[] = {
-       1,
-       100, 100, 148
+       62, 62, 154
 };
 static const int lexer_goto_row85[] = {
-       4,
-       48, 57, 149,
-       65, 90, 150,
-       95, 95, 151,
-       97, 122, 152
+       1,
+       61, 61, 155
 };
 static const int lexer_goto_row86[] = {
-       5,
-       0, 91, 153,
-       92, 92, 154,
-       93, 95, 153,
-       96, 96, 155,
-       97, 255, 153
+       1,
+       48, 122, -29
 };
 static const int lexer_goto_row87[] = {
        1,
-       48, 122, -38
+       48, 122, -29
 };
 static const int lexer_goto_row88[] = {
        1,
-       48, 122, -38
+       48, 122, -29
 };
 static const int lexer_goto_row89[] = {
        1,
-       48, 122, -38
-};
-static const int lexer_goto_row90[] = {
-       1,
-       48, 122, -38
+       48, 122, -29
 };
 static const int lexer_goto_row91[] = {
-       5,
-       48, 110, -35,
-       111, 111, 156,
-       112, 114, 89,
-       115, 115, 157,
-       116, 122, 89
+       1,
+       100, 100, 156
 };
 static const int lexer_goto_row92[] = {
        4,
-       48, 95, -32,
-       97, 99, 89,
-       100, 100, 158,
-       101, 122, 89
+       48, 57, 157,
+       65, 90, 158,
+       95, 95, 159,
+       97, 122, 160
 };
 static const int lexer_goto_row93[] = {
-       4,
-       48, 95, -32,
-       97, 114, 89,
-       115, 115, 159,
-       116, 122, 89
+       5,
+       0, 91, 161,
+       92, 92, 162,
+       93, 95, 161,
+       96, 96, 163,
+       97, 255, 161
 };
 static const int lexer_goto_row94[] = {
-       3,
-       48, 100, -42,
-       101, 101, 160,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row95[] = {
-       3,
-       48, 95, -32,
-       97, 97, 161,
-       98, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row96[] = {
-       3,
-       48, 109, -43,
-       110, 110, 162,
-       111, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row97[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row98[] = {
-       3,
-       48, 114, -94,
-       115, 115, 163,
-       116, 122, 89
+       5,
+       48, 110, -38,
+       111, 111, 164,
+       112, 114, 96,
+       115, 115, 165,
+       116, 122, 96
 };
 static const int lexer_goto_row99[] = {
-       5,
-       48, 99, -93,
-       100, 100, 164,
-       101, 116, 89,
-       117, 117, 165,
-       118, 122, 89
+       4,
+       48, 95, -35,
+       97, 99, 96,
+       100, 100, 166,
+       101, 122, 96
 };
 static const int lexer_goto_row100[] = {
        4,
-       48, 95, -32,
-       97, 115, 89,
-       116, 116, 166,
-       117, 122, 89
+       48, 95, -35,
+       97, 114, 96,
+       115, 115, 167,
+       116, 122, 96
 };
 static const int lexer_goto_row101[] = {
        3,
-       48, 107, -34,
-       108, 108, 167,
-       109, 122, 89
+       48, 100, -45,
+       101, 101, 168,
+       102, 122, 96
 };
 static const int lexer_goto_row102[] = {
        3,
-       48, 113, -33,
-       114, 114, 168,
-       115, 122, 89
+       48, 95, -35,
+       97, 97, 169,
+       98, 122, 96
 };
 static const int lexer_goto_row103[] = {
        3,
-       48, 109, -43,
-       110, 110, 169,
-       111, 122, 89
+       48, 109, -46,
+       110, 110, 170,
+       111, 122, 96
 };
 static const int lexer_goto_row104[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row105[] = {
-       4,
-       48, 95, -32,
-       97, 111, 89,
-       112, 112, 170,
-       113, 122, 89
+       3,
+       48, 114, -101,
+       115, 115, 171,
+       116, 122, 96
 };
 static const int lexer_goto_row106[] = {
-       6,
-       48, 95, -32,
-       97, 104, 89,
-       105, 105, 171,
-       106, 115, 89,
-       116, 116, 172,
-       117, 122, 89
+       5,
+       48, 99, -100,
+       100, 100, 172,
+       101, 116, 96,
+       117, 117, 173,
+       118, 122, 96
 };
 static const int lexer_goto_row107[] = {
-       5,
-       48, 95, -32,
-       97, 97, 173,
-       98, 114, 89,
-       115, 115, 174,
-       116, 122, 89
+       4,
+       48, 95, -35,
+       97, 115, 96,
+       116, 116, 174,
+       117, 122, 96
 };
 static const int lexer_goto_row108[] = {
        3,
-       48, 97, -32,
-       98, 98, 175,
-       99, 122, 89
+       48, 107, -37,
+       108, 108, 175,
+       109, 122, 96
 };
 static const int lexer_goto_row109[] = {
        3,
-       48, 110, -35,
-       111, 111, 176,
-       112, 122, 89
+       48, 113, -36,
+       114, 114, 176,
+       115, 122, 96
 };
 static const int lexer_goto_row110[] = {
        3,
-       48, 99, -93,
-       100, 100, 177,
-       101, 122, 89
+       48, 109, -46,
+       110, 110, 177,
+       111, 122, 96
 };
 static const int lexer_goto_row111[] = {
-       4,
-       48, 95, -32,
-       97, 118, 89,
-       119, 119, 178,
-       120, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row112[] = {
-       3,
-       48, 115, -101,
-       116, 116, 179,
-       117, 122, 89
+       4,
+       48, 95, -35,
+       97, 111, 96,
+       112, 112, 178,
+       113, 122, 96
 };
 static const int lexer_goto_row113[] = {
-       3,
-       48, 107, -34,
-       108, 108, 180,
-       109, 122, 89
+       6,
+       48, 95, -35,
+       97, 104, 96,
+       105, 105, 179,
+       106, 115, 96,
+       116, 116, 180,
+       117, 122, 96
 };
 static const int lexer_goto_row114[] = {
-       4,
-       48, 95, -32,
-       97, 98, 89,
-       99, 99, 181,
-       100, 122, 89
+       5,
+       48, 95, -35,
+       97, 97, 181,
+       98, 114, 96,
+       115, 115, 182,
+       116, 122, 96
 };
 static const int lexer_goto_row115[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 97, -35,
+       98, 98, 183,
+       99, 122, 96
 };
 static const int lexer_goto_row116[] = {
        3,
-       48, 98, -115,
-       99, 99, 182,
-       100, 122, 89
+       48, 110, -38,
+       111, 111, 184,
+       112, 122, 96
 };
 static const int lexer_goto_row117[] = {
-       5,
-       48, 104, -107,
-       105, 105, 183,
-       106, 110, 89,
-       111, 111, 184,
-       112, 122, 89
+       3,
+       48, 99, -100,
+       100, 100, 185,
+       101, 122, 96
 };
 static const int lexer_goto_row118[] = {
-       3,
-       48, 97, -32,
-       98, 98, 185,
-       99, 122, 89
+       4,
+       48, 95, -35,
+       97, 118, 96,
+       119, 119, 186,
+       120, 122, 96
 };
 static const int lexer_goto_row119[] = {
-       5,
-       48, 99, -93,
-       100, 100, 186,
-       101, 115, 89,
+       3,
+       48, 115, -108,
        116, 116, 187,
-       117, 122, 89
+       117, 122, 96
 };
 static const int lexer_goto_row120[] = {
        3,
-       48, 107, -34,
+       48, 107, -37,
        108, 108, 188,
-       109, 122, 89
+       109, 122, 96
 };
 static const int lexer_goto_row121[] = {
-       3,
-       48, 111, -106,
-       112, 112, 189,
-       113, 122, 89
+       4,
+       48, 95, -35,
+       97, 98, 96,
+       99, 99, 189,
+       100, 122, 96
 };
 static const int lexer_goto_row122[] = {
-       3,
-       48, 100, -42,
-       101, 101, 190,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row123[] = {
-       4,
-       48, 95, -32,
-       97, 116, 89,
-       117, 117, 191,
-       118, 122, 89
+       3,
+       48, 98, -122,
+       99, 99, 190,
+       100, 122, 96
 };
 static const int lexer_goto_row124[] = {
-       3,
-       48, 111, -106,
-       112, 112, 192,
-       113, 122, 89
+       5,
+       48, 104, -114,
+       105, 105, 191,
+       106, 110, 96,
+       111, 111, 192,
+       112, 122, 96
 };
 static const int lexer_goto_row125[] = {
        3,
-       48, 104, -107,
-       105, 105, 193,
-       106, 122, 89
+       48, 97, -35,
+       98, 98, 193,
+       99, 122, 96
 };
 static const int lexer_goto_row126[] = {
-       3,
-       48, 113, -33,
-       114, 114, 194,
-       115, 122, 89
+       5,
+       48, 99, -100,
+       100, 100, 194,
+       101, 115, 96,
+       116, 116, 195,
+       117, 122, 96
 };
 static const int lexer_goto_row127[] = {
        3,
-       48, 104, -107,
-       105, 105, 195,
-       106, 122, 89
+       48, 107, -37,
+       108, 108, 196,
+       109, 122, 96
 };
 static const int lexer_goto_row128[] = {
        3,
-       48, 115, -101,
-       116, 116, 196,
-       117, 122, 89
+       48, 111, -113,
+       112, 112, 197,
+       113, 122, 96
 };
 static const int lexer_goto_row129[] = {
-       2,
-       0, 123, -51,
-       124, 255, 128
+       3,
+       48, 100, -45,
+       101, 101, 198,
+       102, 122, 96
+};
+static const int lexer_goto_row130[] = {
+       4,
+       48, 95, -35,
+       97, 116, 96,
+       117, 117, 199,
+       118, 122, 96
 };
 static const int lexer_goto_row131[] = {
        3,
-       0, 9, 197,
-       11, 12, 197,
-       14, 255, 197
+       48, 111, -113,
+       112, 112, 200,
+       113, 122, 96
+};
+static const int lexer_goto_row132[] = {
+       3,
+       48, 104, -114,
+       105, 105, 201,
+       106, 122, 96
 };
 static const int lexer_goto_row133[] = {
        3,
-       0, 124, -51,
-       125, 125, 198,
-       126, 255, 128
+       48, 113, -36,
+       114, 114, 202,
+       115, 122, 96
+};
+static const int lexer_goto_row134[] = {
+       3,
+       48, 104, -114,
+       105, 105, 203,
+       106, 122, 96
 };
 static const int lexer_goto_row135[] = {
-       11,
-       0, 9, 199,
-       10, 10, 200,
-       11, 12, 199,
-       13, 13, 201,
-       14, 33, 199,
-       34, 34, 202,
-       35, 91, 199,
-       92, 92, 203,
-       93, 122, 199,
-       123, 123, 204,
-       124, 255, 199
-};
-static const int lexer_goto_row136[] = {
-       1,
-       0, 255, -54
+       3,
+       48, 115, -108,
+       116, 116, 204,
+       117, 122, 96
+};
+static const int lexer_goto_row137[] = {
+       2,
+       0, 123, -55,
+       124, 255, 136
 };
 static const int lexer_goto_row139[] = {
-       9,
+       3,
        0, 9, 205,
-       10, 10, 206,
        11, 12, 205,
-       13, 13, 207,
-       14, 38, 205,
-       39, 39, 208,
-       40, 91, 205,
-       92, 92, 209,
-       93, 255, 205
+       14, 255, 205
 };
-static const int lexer_goto_row140[] = {
-       1,
-       39, 39, 210
+static const int lexer_goto_row141[] = {
+       3,
+       0, 124, -55,
+       125, 125, 206,
+       126, 255, 136
 };
 static const int lexer_goto_row143[] = {
-       1,
-       48, 102, -73
+       11,
+       0, 9, 207,
+       10, 10, 208,
+       11, 12, 207,
+       13, 13, 209,
+       14, 33, 207,
+       34, 34, 210,
+       35, 91, 207,
+       92, 92, 211,
+       93, 122, 207,
+       123, 123, 212,
+       124, 255, 207
 };
 static const int lexer_goto_row144[] = {
        1,
-       48, 102, -73
-};
-static const int lexer_goto_row145[] = {
-       1,
-       48, 102, -73
+       0, 255, -59
 };
-static const int lexer_goto_row149[] = {
-       1,
-       101, 101, 211
+static const int lexer_goto_row147[] = {
+       9,
+       0, 9, 213,
+       10, 10, 214,
+       11, 12, 213,
+       13, 13, 215,
+       14, 38, 213,
+       39, 39, 216,
+       40, 91, 213,
+       92, 92, 217,
+       93, 255, 213
 };
-static const int lexer_goto_row150[] = {
+static const int lexer_goto_row148[] = {
        1,
-       48, 122, -86
+       39, 39, 218
 };
 static const int lexer_goto_row151[] = {
        1,
-       48, 122, -86
+       48, 102, -79
 };
 static const int lexer_goto_row152[] = {
        1,
-       48, 122, -86
+       48, 102, -79
 };
 static const int lexer_goto_row153[] = {
        1,
-       48, 122, -86
-};
-static const int lexer_goto_row154[] = {
-       1,
-       0, 255, -87
-};
-static const int lexer_goto_row155[] = {
-       1,
-       0, 255, 212
-};
-static const int lexer_goto_row156[] = {
-       3,
-       0, 124, 213,
-       125, 125, 214,
-       126, 255, 213
+       48, 102, -79
 };
 static const int lexer_goto_row157[] = {
-       3,
-       48, 113, -33,
-       114, 114, 215,
-       115, 122, 89
+       1,
+       101, 101, 219
 };
 static const int lexer_goto_row158[] = {
-       3,
-       48, 115, -101,
-       116, 116, 216,
-       117, 122, 89
+       1,
+       48, 122, -93
 };
 static const int lexer_goto_row159[] = {
        1,
-       48, 122, -38
+       48, 122, -93
 };
 static const int lexer_goto_row160[] = {
-       3,
-       48, 100, -42,
-       101, 101, 217,
-       102, 122, 89
+       1,
+       48, 122, -93
 };
 static const int lexer_goto_row161[] = {
-       3,
-       48, 95, -32,
-       97, 97, 218,
-       98, 122, 89
+       1,
+       48, 122, -93
 };
 static const int lexer_goto_row162[] = {
-       3,
-       48, 114, -94,
-       115, 115, 219,
-       116, 122, 89
+       1,
+       0, 255, -94
 };
 static const int lexer_goto_row163[] = {
-       3,
-       48, 115, -101,
-       116, 116, 220,
-       117, 122, 89
+       1,
+       0, 255, 220
 };
 static const int lexer_goto_row164[] = {
        3,
-       48, 100, -42,
-       101, 101, 221,
-       102, 122, 89
+       0, 124, 221,
+       125, 125, 222,
+       126, 255, 221
 };
 static const int lexer_goto_row165[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 113, -36,
+       114, 114, 223,
+       115, 122, 96
 };
 static const int lexer_goto_row166[] = {
-       4,
-       48, 95, -32,
-       97, 108, 89,
-       109, 109, 222,
-       110, 122, 89
+       3,
+       48, 115, -108,
+       116, 116, 224,
+       117, 122, 96
 };
 static const int lexer_goto_row167[] = {
-       3,
-       48, 100, -42,
-       101, 101, 223,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row168[] = {
        3,
-       48, 114, -94,
-       115, 115, 224,
-       116, 122, 89
+       48, 100, -45,
+       101, 101, 225,
+       102, 122, 96
 };
 static const int lexer_goto_row169[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 95, -35,
+       97, 97, 226,
+       98, 122, 96
 };
 static const int lexer_goto_row170[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 114, -101,
+       115, 115, 227,
+       116, 122, 96
 };
 static const int lexer_goto_row171[] = {
-       5,
-       48, 107, -34,
-       108, 108, 225,
-       109, 110, 89,
-       111, 111, 226,
-       112, 122, 89
+       3,
+       48, 115, -108,
+       116, 116, 228,
+       117, 122, 96
 };
 static const int lexer_goto_row172[] = {
        3,
-       48, 115, -101,
-       116, 116, 227,
-       117, 122, 89
+       48, 100, -45,
+       101, 101, 229,
+       102, 122, 96
 };
 static const int lexer_goto_row173[] = {
-       5,
-       48, 100, -42,
-       101, 101, 228,
-       102, 113, 89,
-       114, 114, 229,
-       115, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row174[] = {
-       1,
-       48, 122, -38
+       4,
+       48, 95, -35,
+       97, 108, 96,
+       109, 109, 230,
+       110, 122, 96
 };
 static const int lexer_goto_row175[] = {
        3,
-       48, 100, -42,
-       101, 101, 230,
-       102, 122, 89
+       48, 100, -45,
+       101, 101, 231,
+       102, 122, 96
 };
 static const int lexer_goto_row176[] = {
        3,
-       48, 100, -42,
-       101, 101, 231,
-       102, 122, 89
+       48, 114, -101,
+       115, 115, 232,
+       116, 122, 96
 };
 static const int lexer_goto_row177[] = {
-       3,
-       48, 111, -106,
-       112, 112, 232,
-       113, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row178[] = {
-       3,
-       48, 116, -124,
-       117, 117, 233,
-       118, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row179[] = {
-       1,
-       48, 122, -38
+       5,
+       48, 107, -37,
+       108, 108, 233,
+       109, 110, 96,
+       111, 111, 234,
+       112, 122, 96
 };
 static const int lexer_goto_row180[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 115, -108,
+       116, 116, 235,
+       117, 122, 96
 };
 static const int lexer_goto_row181[] = {
-       3,
-       48, 107, -34,
-       108, 108, 234,
-       109, 122, 89
+       5,
+       48, 100, -45,
+       101, 101, 236,
+       102, 113, 96,
+       114, 114, 237,
+       115, 122, 96
 };
 static const int lexer_goto_row182[] = {
-       3,
-       48, 100, -42,
-       101, 101, 235,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row183[] = {
-       4,
-       48, 95, -32,
-       97, 106, 89,
-       107, 107, 236,
-       108, 122, 89
+       3,
+       48, 100, -45,
+       101, 101, 238,
+       102, 122, 96
 };
 static const int lexer_goto_row184[] = {
-       4,
-       48, 95, -32,
-       97, 117, 89,
-       118, 118, 237,
-       119, 122, 89
+       3,
+       48, 100, -45,
+       101, 101, 239,
+       102, 122, 96
 };
 static const int lexer_goto_row185[] = {
        3,
-       48, 115, -101,
-       116, 116, 238,
-       117, 122, 89
+       48, 111, -113,
+       112, 112, 240,
+       113, 122, 96
 };
 static const int lexer_goto_row186[] = {
        3,
-       48, 107, -34,
-       108, 108, 239,
-       109, 122, 89
+       48, 116, -131,
+       117, 117, 241,
+       118, 122, 96
 };
 static const int lexer_goto_row187[] = {
-       3,
-       48, 100, -42,
-       101, 101, 240,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row188[] = {
-       3,
-       48, 116, -124,
-       117, 117, 241,
-       118, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row189[] = {
        3,
-       48, 101, -39,
-       102, 102, 242,
-       103, 122, 89
+       48, 107, -37,
+       108, 108, 242,
+       109, 122, 96
 };
 static const int lexer_goto_row190[] = {
        3,
-       48, 100, -42,
+       48, 100, -45,
        101, 101, 243,
-       102, 122, 89
+       102, 122, 96
 };
 static const int lexer_goto_row191[] = {
-       3,
-       48, 109, -43,
-       110, 110, 244,
-       111, 122, 89
+       4,
+       48, 95, -35,
+       97, 106, 96,
+       107, 107, 244,
+       108, 122, 96
 };
 static const int lexer_goto_row192[] = {
-       3,
-       48, 100, -42,
-       101, 101, 245,
-       102, 122, 89
+       4,
+       48, 95, -35,
+       97, 117, 96,
+       118, 118, 245,
+       119, 122, 96
 };
 static const int lexer_goto_row193[] = {
        3,
-       48, 100, -42,
-       101, 101, 246,
-       102, 122, 89
+       48, 115, -108,
+       116, 116, 246,
+       117, 122, 96
 };
 static const int lexer_goto_row194[] = {
        3,
-       48, 117, -185,
-       118, 118, 247,
-       119, 122, 89
+       48, 107, -37,
+       108, 108, 247,
+       109, 122, 96
 };
 static const int lexer_goto_row195[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 100, -45,
+       101, 101, 248,
+       102, 122, 96
 };
 static const int lexer_goto_row196[] = {
        3,
-       48, 107, -34,
-       108, 108, 248,
-       109, 122, 89
+       48, 116, -131,
+       117, 117, 249,
+       118, 122, 96
 };
 static const int lexer_goto_row197[] = {
        3,
-       48, 103, -47,
-       104, 104, 249,
-       105, 122, 89
+       48, 101, -42,
+       102, 102, 250,
+       103, 122, 96
 };
 static const int lexer_goto_row198[] = {
-       1,
-       0, 255, -130
+       3,
+       48, 100, -45,
+       101, 101, 251,
+       102, 122, 96
 };
 static const int lexer_goto_row199[] = {
-       11,
-       0, 9, 250,
-       10, 10, 251,
-       11, 12, 250,
-       13, 13, 252,
-       14, 33, 250,
-       34, 34, 253,
-       35, 91, 250,
-       92, 92, 254,
-       93, 122, 250,
-       123, 123, 255,
-       124, 255, 250
+       3,
+       48, 109, -46,
+       110, 110, 252,
+       111, 122, 96
 };
 static const int lexer_goto_row200[] = {
-       1,
-       0, 255, -136
+       3,
+       48, 100, -45,
+       101, 101, 253,
+       102, 122, 96
 };
 static const int lexer_goto_row201[] = {
-       1,
-       0, 255, -136
+       3,
+       48, 100, -45,
+       101, 101, 254,
+       102, 122, 96
 };
 static const int lexer_goto_row202[] = {
-       1,
-       0, 255, -136
+       3,
+       48, 117, -193,
+       118, 118, 255,
+       119, 122, 96
 };
 static const int lexer_goto_row203[] = {
-       5,
-       0, 33, -136,
-       34, 34, 256,
-       35, 122, -136,
-       123, 123, 257,
-       124, 255, 199
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row204[] = {
        3,
-       0, 9, 258,
-       11, 12, 258,
-       14, 255, 258
+       48, 107, -37,
+       108, 108, 256,
+       109, 122, 96
 };
 static const int lexer_goto_row205[] = {
-       5,
-       0, 33, -136,
-       34, 34, 259,
-       35, 122, -136,
-       123, 123, 260,
-       124, 255, 199
+       3,
+       48, 103, -50,
+       104, 104, 257,
+       105, 122, 96
 };
 static const int lexer_goto_row206[] = {
        1,
-       0, 255, -140
+       0, 255, -138
 };
 static const int lexer_goto_row207[] = {
-       1,
-       0, 255, -140
+       11,
+       0, 9, 258,
+       10, 10, 259,
+       11, 12, 258,
+       13, 13, 260,
+       14, 33, 258,
+       34, 34, 261,
+       35, 91, 258,
+       92, 92, 262,
+       93, 122, 258,
+       123, 123, 263,
+       124, 255, 258
 };
 static const int lexer_goto_row208[] = {
        1,
-       0, 255, -140
+       0, 255, -144
 };
 static const int lexer_goto_row209[] = {
-       9,
-       0, 9, 261,
-       10, 10, 262,
-       11, 12, 261,
-       13, 13, 263,
-       14, 38, 261,
-       39, 39, 264,
-       40, 91, 261,
-       92, 92, 265,
-       93, 255, 261
+       1,
+       0, 255, -144
 };
 static const int lexer_goto_row210[] = {
+       1,
+       0, 255, -144
+};
+static const int lexer_goto_row211[] = {
+       5,
+       0, 33, -144,
+       34, 34, 264,
+       35, 122, -144,
+       123, 123, 265,
+       124, 255, 207
+};
+static const int lexer_goto_row212[] = {
        3,
        0, 9, 266,
        11, 12, 266,
        14, 255, 266
 };
-static const int lexer_goto_row212[] = {
-       1,
-       98, 98, 267
-};
 static const int lexer_goto_row213[] = {
-       1,
-       0, 255, -87
+       5,
+       0, 33, -144,
+       34, 34, 267,
+       35, 122, -144,
+       123, 123, 268,
+       124, 255, 207
 };
 static const int lexer_goto_row214[] = {
        1,
-       0, 255, -87
+       0, 255, -148
+};
+static const int lexer_goto_row215[] = {
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row216[] = {
-       3,
-       48, 115, -101,
-       116, 116, 268,
-       117, 122, 89
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row217[] = {
-       3,
-       48, 113, -33,
-       114, 114, 269,
-       115, 122, 89
+       9,
+       0, 9, 269,
+       10, 10, 270,
+       11, 12, 269,
+       13, 13, 271,
+       14, 38, 269,
+       39, 39, 272,
+       40, 91, 269,
+       92, 92, 273,
+       93, 255, 269
 };
 static const int lexer_goto_row218[] = {
        3,
-       48, 113, -33,
-       114, 114, 270,
-       115, 122, 89
-};
-static const int lexer_goto_row219[] = {
-       3,
-       48, 106, -184,
-       107, 107, 271,
-       108, 122, 89
+       0, 9, 274,
+       11, 12, 274,
+       14, 255, 274
 };
 static const int lexer_goto_row220[] = {
-       3,
-       48, 114, -94,
-       115, 115, 272,
-       116, 122, 89
+       1,
+       98, 98, 275
 };
 static const int lexer_goto_row221[] = {
-       3,
-       48, 104, -107,
-       105, 105, 273,
-       106, 122, 89
-};
-static const int lexer_goto_row222[] = {
        1,
-       48, 122, -38
+       0, 255, -94
 };
-static const int lexer_goto_row223[] = {
+static const int lexer_goto_row222[] = {
        1,
-       48, 122, -38
+       0, 255, -94
 };
 static const int lexer_goto_row224[] = {
        3,
-       48, 113, -33,
-       114, 114, 274,
-       115, 122, 89
+       48, 115, -108,
+       116, 116, 276,
+       117, 122, 96
 };
 static const int lexer_goto_row225[] = {
        3,
-       48, 100, -42,
-       101, 101, 275,
-       102, 122, 89
+       48, 113, -36,
+       114, 114, 277,
+       115, 122, 96
 };
 static const int lexer_goto_row226[] = {
        3,
-       48, 104, -107,
-       105, 105, 276,
-       106, 122, 89
+       48, 113, -36,
+       114, 114, 278,
+       115, 122, 96
 };
 static const int lexer_goto_row227[] = {
        3,
-       48, 113, -33,
-       114, 114, 277,
-       115, 122, 89
+       48, 106, -192,
+       107, 107, 279,
+       108, 122, 96
 };
 static const int lexer_goto_row228[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 114, -101,
+       115, 115, 280,
+       116, 122, 96
 };
 static const int lexer_goto_row229[] = {
        3,
-       48, 113, -33,
-       114, 114, 278,
-       115, 122, 89
+       48, 104, -114,
+       105, 105, 281,
+       106, 122, 96
 };
 static const int lexer_goto_row230[] = {
-       3,
-       48, 116, -124,
-       117, 117, 279,
-       118, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row231[] = {
-       3,
-       48, 115, -101,
-       116, 116, 280,
-       117, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row232[] = {
        3,
-       48, 107, -34,
-       108, 108, 281,
-       109, 122, 89
+       48, 113, -36,
+       114, 114, 282,
+       115, 122, 96
 };
 static const int lexer_goto_row233[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 100, -45,
+       101, 101, 283,
+       102, 122, 96
 };
 static const int lexer_goto_row234[] = {
        3,
-       48, 107, -34,
-       108, 108, 282,
-       109, 122, 89
+       48, 104, -114,
+       105, 105, 284,
+       106, 122, 96
 };
 static const int lexer_goto_row235[] = {
        3,
-       48, 95, -32,
-       97, 97, 283,
-       98, 122, 89
+       48, 113, -36,
+       114, 114, 285,
+       115, 122, 96
 };
 static const int lexer_goto_row236[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row237[] = {
        3,
-       48, 95, -32,
-       97, 97, 284,
-       98, 122, 89
+       48, 113, -36,
+       114, 114, 286,
+       115, 122, 96
 };
 static const int lexer_goto_row238[] = {
        3,
-       48, 95, -32,
-       97, 97, 285,
-       98, 122, 89
+       48, 116, -131,
+       117, 117, 287,
+       118, 122, 96
 };
 static const int lexer_goto_row239[] = {
        3,
-       48, 100, -42,
-       101, 101, 286,
-       102, 122, 89
+       48, 115, -108,
+       116, 116, 288,
+       117, 122, 96
 };
 static const int lexer_goto_row240[] = {
        3,
-       48, 104, -107,
-       105, 105, 287,
-       106, 122, 89
+       48, 107, -37,
+       108, 108, 289,
+       109, 122, 96
 };
 static const int lexer_goto_row241[] = {
-       3,
-       48, 101, -39,
-       102, 102, 288,
-       103, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row242[] = {
        3,
-       48, 113, -33,
-       114, 114, 289,
-       115, 122, 89
+       48, 107, -37,
+       108, 108, 290,
+       109, 122, 96
 };
 static const int lexer_goto_row243[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 95, -35,
+       97, 97, 291,
+       98, 122, 96
 };
 static const int lexer_goto_row244[] = {
-       3,
-       48, 113, -33,
-       114, 114, 290,
-       115, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row245[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 95, -35,
+       97, 97, 292,
+       98, 122, 96
 };
 static const int lexer_goto_row246[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 95, -35,
+       97, 97, 293,
+       98, 122, 96
 };
 static const int lexer_goto_row247[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 100, -45,
+       101, 101, 294,
+       102, 122, 96
 };
 static const int lexer_goto_row248[] = {
        3,
-       48, 100, -42,
-       101, 101, 291,
-       102, 122, 89
+       48, 104, -114,
+       105, 105, 295,
+       106, 122, 96
 };
 static const int lexer_goto_row249[] = {
        3,
-       48, 100, -42,
-       101, 101, 292,
-       102, 122, 89
+       48, 101, -42,
+       102, 102, 296,
+       103, 122, 96
 };
 static const int lexer_goto_row250[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 113, -36,
+       114, 114, 297,
+       115, 122, 96
 };
 static const int lexer_goto_row251[] = {
        1,
-       0, 255, -200
+       48, 122, -41
 };
 static const int lexer_goto_row252[] = {
-       11,
-       0, 9, 293,
-       10, 10, 251,
-       11, 12, 293,
-       13, 13, 252,
-       14, 33, 293,
-       34, 34, 294,
-       35, 91, 293,
-       92, 92, 295,
-       93, 122, 293,
-       123, 123, 296,
-       124, 255, 293
+       3,
+       48, 113, -36,
+       114, 114, 298,
+       115, 122, 96
 };
 static const int lexer_goto_row253[] = {
        1,
-       0, 255, -253
+       48, 122, -41
 };
 static const int lexer_goto_row254[] = {
-       5,
-       0, 33, -253,
-       34, 34, 297,
-       35, 122, -253,
-       123, 123, 298,
-       124, 255, 293
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row255[] = {
-       3,
-       0, 9, 299,
-       11, 12, 299,
-       14, 255, 299
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row256[] = {
-       5,
-       0, 33, -253,
-       34, 34, 300,
-       35, 122, -253,
-       123, 123, 301,
-       124, 255, 293
+       3,
+       48, 100, -45,
+       101, 101, 299,
+       102, 122, 96
 };
 static const int lexer_goto_row257[] = {
        3,
-       0, 33, -136,
-       34, 34, 302,
-       35, 255, -204
+       48, 100, -45,
+       101, 101, 300,
+       102, 122, 96
 };
 static const int lexer_goto_row258[] = {
-       3,
-       0, 122, -206,
-       123, 123, 303,
-       124, 255, 199
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row259[] = {
        1,
-       0, 255, -136
+       0, 255, -208
 };
 static const int lexer_goto_row260[] = {
-       3,
-       0, 33, -136,
-       34, 34, 304,
-       35, 255, -204
+       11,
+       0, 9, 301,
+       10, 10, 259,
+       11, 12, 301,
+       13, 13, 260,
+       14, 33, 301,
+       34, 34, 302,
+       35, 91, 301,
+       92, 92, 303,
+       93, 122, 301,
+       123, 123, 304,
+       124, 255, 301
 };
 static const int lexer_goto_row261[] = {
-       3,
-       0, 122, -206,
-       123, 123, 305,
-       124, 255, 199
+       1,
+       0, 255, -261
 };
 static const int lexer_goto_row262[] = {
-       1,
-       0, 255, -140
+       5,
+       0, 33, -261,
+       34, 34, 305,
+       35, 122, -261,
+       123, 123, 306,
+       124, 255, 301
 };
 static const int lexer_goto_row263[] = {
-       1,
-       0, 255, -140
+       3,
+       0, 9, 307,
+       11, 12, 307,
+       14, 255, 307
 };
 static const int lexer_goto_row264[] = {
-       1,
-       0, 255, -140
+       5,
+       0, 33, -261,
+       34, 34, 308,
+       35, 122, -261,
+       123, 123, 309,
+       124, 255, 301
 };
 static const int lexer_goto_row265[] = {
-       9,
-       0, 9, 306,
-       10, 10, 307,
-       11, 12, 306,
-       13, 13, 308,
-       14, 38, 306,
-       39, 39, 309,
-       40, 91, 306,
-       92, 92, 310,
-       93, 255, 306
+       3,
+       0, 33, -144,
+       34, 34, 310,
+       35, 255, -212
 };
 static const int lexer_goto_row266[] = {
        3,
-       0, 9, 311,
-       11, 12, 311,
-       14, 255, 311
+       0, 122, -214,
+       123, 123, 311,
+       124, 255, 207
 };
 static const int lexer_goto_row267[] = {
        1,
-       0, 255, -140
+       0, 255, -144
 };
 static const int lexer_goto_row268[] = {
-       1,
-       117, 117, 312
+       3,
+       0, 33, -144,
+       34, 34, 312,
+       35, 255, -212
 };
 static const int lexer_goto_row269[] = {
-       1,
-       48, 122, -38
+       3,
+       0, 122, -214,
+       123, 123, 313,
+       124, 255, 207
 };
 static const int lexer_goto_row270[] = {
-       3,
-       48, 95, -32,
-       97, 97, 313,
-       98, 122, 89
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row271[] = {
-       3,
-       48, 115, -101,
-       116, 116, 314,
-       117, 122, 89
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row272[] = {
        1,
-       48, 122, -38
+       0, 255, -148
 };
 static const int lexer_goto_row273[] = {
-       1,
-       48, 122, -38
+       9,
+       0, 9, 314,
+       10, 10, 315,
+       11, 12, 314,
+       13, 13, 316,
+       14, 38, 314,
+       39, 39, 317,
+       40, 91, 314,
+       92, 92, 318,
+       93, 255, 314
 };
 static const int lexer_goto_row274[] = {
        3,
-       48, 109, -43,
-       110, 110, 315,
-       111, 122, 89
+       0, 9, 319,
+       11, 12, 319,
+       14, 255, 319
 };
 static const int lexer_goto_row275[] = {
-       3,
-       48, 109, -43,
-       110, 110, 316,
-       111, 122, 89
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row276[] = {
        1,
-       48, 122, -38
+       117, 117, 320
 };
 static const int lexer_goto_row277[] = {
-       3,
-       48, 100, -42,
-       101, 101, 317,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row278[] = {
        3,
-       48, 115, -101,
-       116, 116, 318,
-       117, 122, 89
+       48, 95, -35,
+       97, 97, 321,
+       98, 122, 96
 };
 static const int lexer_goto_row279[] = {
        3,
-       48, 101, -39,
-       102, 102, 319,
-       103, 122, 89
+       48, 115, -108,
+       116, 116, 322,
+       117, 122, 96
 };
 static const int lexer_goto_row280[] = {
-       3,
-       48, 99, -93,
-       100, 100, 320,
-       101, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row281[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row282[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 109, -46,
+       110, 110, 323,
+       111, 122, 96
 };
 static const int lexer_goto_row283[] = {
        3,
-       48, 100, -42,
-       101, 101, 321,
-       102, 122, 89
+       48, 109, -46,
+       110, 110, 324,
+       111, 122, 96
 };
 static const int lexer_goto_row284[] = {
-       3,
-       48, 97, -32,
-       98, 98, 322,
-       99, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row285[] = {
-       4,
-       48, 95, -32,
-       97, 102, 89,
-       103, 103, 323,
-       104, 122, 89
+       3,
+       48, 100, -45,
+       101, 101, 325,
+       102, 122, 96
 };
 static const int lexer_goto_row286[] = {
        3,
-       48, 115, -101,
-       116, 116, 324,
-       117, 122, 89
+       48, 115, -108,
+       116, 116, 326,
+       117, 122, 96
 };
 static const int lexer_goto_row287[] = {
        3,
-       48, 98, -115,
-       99, 99, 325,
-       100, 122, 89
+       48, 101, -42,
+       102, 102, 327,
+       103, 122, 96
 };
 static const int lexer_goto_row288[] = {
        3,
-       48, 98, -115,
-       99, 99, 326,
-       100, 122, 89
+       48, 99, -100,
+       100, 100, 328,
+       101, 122, 96
 };
 static const int lexer_goto_row289[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row290[] = {
-       3,
-       48, 109, -43,
-       110, 110, 327,
-       111, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row291[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 100, -45,
+       101, 101, 329,
+       102, 122, 96
 };
 static const int lexer_goto_row292[] = {
        3,
-       48, 113, -33,
-       114, 114, 328,
-       115, 122, 89
+       48, 97, -35,
+       98, 98, 330,
+       99, 122, 96
 };
 static const int lexer_goto_row293[] = {
-       1,
-       48, 122, -38
+       4,
+       48, 95, -35,
+       97, 102, 96,
+       103, 103, 331,
+       104, 122, 96
 };
 static const int lexer_goto_row294[] = {
-       1,
-       0, 255, -253
+       3,
+       48, 115, -108,
+       116, 116, 332,
+       117, 122, 96
 };
 static const int lexer_goto_row295[] = {
-       1,
-       0, 255, -255
+       3,
+       48, 98, -122,
+       99, 99, 333,
+       100, 122, 96
 };
 static const int lexer_goto_row296[] = {
        3,
-       0, 9, 329,
-       11, 12, 329,
-       14, 255, 329
+       48, 98, -122,
+       99, 99, 334,
+       100, 122, 96
 };
 static const int lexer_goto_row297[] = {
        1,
-       0, 255, -257
+       48, 122, -41
 };
 static const int lexer_goto_row298[] = {
        3,
-       0, 33, -253,
-       34, 34, 330,
-       35, 255, -255
+       48, 109, -46,
+       110, 110, 335,
+       111, 122, 96
 };
 static const int lexer_goto_row299[] = {
-       3,
-       0, 122, -257,
-       123, 123, 331,
-       124, 255, 293
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row300[] = {
-       1,
-       0, 255, -200
+       3,
+       48, 113, -36,
+       114, 114, 336,
+       115, 122, 96
 };
 static const int lexer_goto_row301[] = {
-       3,
-       0, 33, -253,
-       34, 34, 332,
-       35, 255, -255
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row302[] = {
-       3,
-       0, 122, -257,
-       123, 123, 333,
-       124, 255, 293
+       1,
+       0, 255, -261
 };
 static const int lexer_goto_row303[] = {
        1,
-       34, 34, 334
+       0, 255, -263
 };
 static const int lexer_goto_row304[] = {
-       1,
-       0, 255, -262
+       3,
+       0, 9, 337,
+       11, 12, 337,
+       14, 255, 337
 };
 static const int lexer_goto_row305[] = {
        1,
-       0, 255, -258
+       0, 255, -265
 };
 static const int lexer_goto_row306[] = {
-       1,
-       123, 123, 335
+       3,
+       0, 33, -261,
+       34, 34, 338,
+       35, 255, -263
 };
 static const int lexer_goto_row307[] = {
-       1,
-       0, 255, -140
+       3,
+       0, 122, -265,
+       123, 123, 339,
+       124, 255, 301
 };
 static const int lexer_goto_row308[] = {
        1,
-       0, 255, -140
+       0, 255, -208
 };
 static const int lexer_goto_row309[] = {
-       1,
-       0, 255, -140
+       3,
+       0, 33, -261,
+       34, 34, 340,
+       35, 255, -263
 };
-static const int lexer_goto_row311[] = {
+static const int lexer_goto_row310[] = {
        3,
-       0, 9, 336,
-       11, 12, 336,
-       14, 255, 336
+       0, 122, -265,
+       123, 123, 341,
+       124, 255, 301
+};
+static const int lexer_goto_row311[] = {
+       1,
+       34, 34, 342
 };
 static const int lexer_goto_row312[] = {
        1,
-       0, 255, -140
+       0, 255, -270
 };
 static const int lexer_goto_row313[] = {
        1,
-       103, 103, 337
+       0, 255, -266
 };
 static const int lexer_goto_row314[] = {
-       3,
-       48, 98, -115,
-       99, 99, 338,
-       100, 122, 89
+       1,
+       123, 123, 343
 };
 static const int lexer_goto_row315[] = {
        1,
-       48, 122, -38
+       0, 255, -148
 };
 static const int lexer_goto_row316[] = {
-       3,
-       48, 116, -124,
-       117, 117, 339,
-       118, 122, 89
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row317[] = {
        1,
-       48, 122, -38
-};
-static const int lexer_goto_row318[] = {
-       3,
-       48, 114, -94,
-       115, 115, 340,
-       116, 122, 89
+       0, 255, -148
 };
 static const int lexer_goto_row319[] = {
-       1,
-       48, 122, -38
+       3,
+       0, 9, 344,
+       11, 12, 344,
+       14, 255, 344
 };
 static const int lexer_goto_row320[] = {
-       3,
-       48, 95, -32,
-       97, 97, 341,
-       98, 122, 89
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row321[] = {
-       3,
-       48, 100, -42,
-       101, 101, 342,
-       102, 122, 89
+       1,
+       103, 103, 345
 };
 static const int lexer_goto_row322[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 98, -122,
+       99, 99, 346,
+       100, 122, 96
 };
 static const int lexer_goto_row323[] = {
-       3,
-       48, 107, -34,
-       108, 108, 343,
-       109, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row324[] = {
        3,
-       48, 100, -42,
-       101, 101, 344,
-       102, 122, 89
+       48, 116, -131,
+       117, 117, 347,
+       118, 122, 96
 };
 static const int lexer_goto_row325[] = {
-       3,
-       48, 100, -42,
-       101, 101, 345,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row326[] = {
        3,
-       48, 115, -101,
-       116, 116, 346,
-       117, 122, 89
+       48, 114, -101,
+       115, 115, 348,
+       116, 122, 96
 };
 static const int lexer_goto_row327[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row328[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 95, -35,
+       97, 97, 349,
+       98, 122, 96
 };
 static const int lexer_goto_row329[] = {
        3,
-       48, 114, -94,
-       115, 115, 347,
-       116, 122, 89
+       48, 100, -45,
+       101, 101, 350,
+       102, 122, 96
 };
 static const int lexer_goto_row330[] = {
        1,
-       0, 255, -253
+       48, 122, -41
 };
 static const int lexer_goto_row331[] = {
-       1,
-       34, 34, 348
+       3,
+       48, 107, -37,
+       108, 108, 351,
+       109, 122, 96
 };
 static const int lexer_goto_row332[] = {
-       1,
-       0, 255, -303
+       3,
+       48, 100, -45,
+       101, 101, 352,
+       102, 122, 96
 };
 static const int lexer_goto_row333[] = {
-       1,
-       0, 255, -299
+       3,
+       48, 100, -45,
+       101, 101, 353,
+       102, 122, 96
 };
 static const int lexer_goto_row334[] = {
-       1,
-       123, 123, 349
+       3,
+       48, 115, -108,
+       116, 116, 354,
+       117, 122, 96
 };
 static const int lexer_goto_row335[] = {
        1,
-       34, 34, 334
+       48, 122, -41
 };
 static const int lexer_goto_row336[] = {
        1,
-       123, 123, 335
+       48, 122, -41
 };
 static const int lexer_goto_row337[] = {
-       1,
-       0, 255, -140
+       3,
+       48, 114, -101,
+       115, 115, 355,
+       116, 122, 96
 };
 static const int lexer_goto_row338[] = {
        1,
-       95, 95, 350
+       0, 255, -261
 };
 static const int lexer_goto_row339[] = {
-       3,
-       48, 115, -101,
-       116, 116, 351,
-       117, 122, 89
+       1,
+       34, 34, 356
 };
 static const int lexer_goto_row340[] = {
-       3,
-       48, 100, -42,
-       101, 101, 352,
-       102, 122, 89
+       1,
+       0, 255, -311
 };
 static const int lexer_goto_row341[] = {
        1,
-       48, 122, -38
+       0, 255, -307
 };
 static const int lexer_goto_row342[] = {
-       3,
-       48, 98, -115,
-       99, 99, 353,
-       100, 122, 89
+       1,
+       123, 123, 357
 };
 static const int lexer_goto_row343[] = {
        1,
-       48, 122, -38
+       34, 34, 342
 };
 static const int lexer_goto_row344[] = {
-       3,
-       48, 100, -42,
-       101, 101, 354,
-       102, 122, 89
+       1,
+       123, 123, 343
 };
 static const int lexer_goto_row345[] = {
        1,
-       48, 122, -38
+       0, 255, -148
 };
 static const int lexer_goto_row346[] = {
        1,
-       48, 122, -38
+       95, 95, 358
 };
 static const int lexer_goto_row347[] = {
        3,
-       48, 100, -42,
-       101, 101, 355,
-       102, 122, 89
+       48, 115, -108,
+       116, 116, 359,
+       117, 122, 96
 };
 static const int lexer_goto_row348[] = {
        3,
-       48, 95, -32,
-       97, 97, 356,
-       98, 122, 89
+       48, 100, -45,
+       101, 101, 360,
+       102, 122, 96
 };
 static const int lexer_goto_row349[] = {
        1,
-       34, 34, 348
+       48, 122, -41
 };
 static const int lexer_goto_row350[] = {
-       1,
-       123, 123, 349
+       3,
+       48, 98, -122,
+       99, 99, 361,
+       100, 122, 96
 };
 static const int lexer_goto_row351[] = {
        1,
-       95, 95, 357
+       48, 122, -41
 };
 static const int lexer_goto_row352[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 100, -45,
+       101, 101, 362,
+       102, 122, 96
 };
 static const int lexer_goto_row353[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row354[] = {
-       3,
-       48, 100, -42,
-       101, 101, 358,
-       102, 122, 89
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row355[] = {
-       1,
-       48, 122, -38
+       3,
+       48, 100, -45,
+       101, 101, 363,
+       102, 122, 96
 };
 static const int lexer_goto_row356[] = {
        3,
-       48, 99, -93,
-       100, 100, 359,
-       101, 122, 89
+       48, 95, -35,
+       97, 97, 364,
+       98, 122, 96
 };
 static const int lexer_goto_row357[] = {
-       3,
-       48, 107, -34,
-       108, 108, 360,
-       109, 122, 89
+       1,
+       34, 34, 356
+};
+static const int lexer_goto_row358[] = {
+       1,
+       123, 123, 357
 };
 static const int lexer_goto_row359[] = {
        1,
-       48, 122, -38
+       95, 95, 365
 };
 static const int lexer_goto_row360[] = {
        1,
-       48, 122, -38
+       48, 122, -41
 };
 static const int lexer_goto_row361[] = {
        1,
-       48, 122, -38
+       48, 122, -41
+};
+static const int lexer_goto_row362[] = {
+       3,
+       48, 100, -45,
+       101, 101, 366,
+       102, 122, 96
+};
+static const int lexer_goto_row363[] = {
+       1,
+       48, 122, -41
+};
+static const int lexer_goto_row364[] = {
+       3,
+       48, 99, -100,
+       100, 100, 367,
+       101, 122, 96
+};
+static const int lexer_goto_row365[] = {
+       3,
+       48, 107, -37,
+       108, 108, 368,
+       109, 122, 96
+};
+static const int lexer_goto_row367[] = {
+       1,
+       48, 122, -41
+};
+static const int lexer_goto_row368[] = {
+       1,
+       48, 122, -41
+};
+static const int lexer_goto_row369[] = {
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row_null[] = {0};
 const int* const lexer_goto_table[] = {
@@ -1906,26 +1923,26 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row8,
        lexer_goto_row9,
        lexer_goto_row10,
+       lexer_goto_row11,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row13,
        lexer_goto_row14,
+       lexer_goto_row15,
        lexer_goto_row_null,
-       lexer_goto_row16,
        lexer_goto_row17,
        lexer_goto_row18,
        lexer_goto_row19,
        lexer_goto_row20,
        lexer_goto_row21,
        lexer_goto_row22,
-       lexer_goto_row23,
-       lexer_goto_row24,
        lexer_goto_row_null,
+       lexer_goto_row24,
+       lexer_goto_row25,
        lexer_goto_row26,
        lexer_goto_row_null,
+       lexer_goto_row28,
+       lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row29,
-       lexer_goto_row30,
        lexer_goto_row31,
        lexer_goto_row32,
        lexer_goto_row33,
@@ -1946,46 +1963,46 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row48,
        lexer_goto_row49,
        lexer_goto_row50,
-       lexer_goto_row_null,
-       lexer_goto_row_null,
+       lexer_goto_row51,
+       lexer_goto_row52,
        lexer_goto_row53,
        lexer_goto_row54,
-       lexer_goto_row55,
        lexer_goto_row_null,
-       lexer_goto_row57,
        lexer_goto_row_null,
+       lexer_goto_row_null,
+       lexer_goto_row58,
        lexer_goto_row59,
+       lexer_goto_row60,
        lexer_goto_row_null,
-       lexer_goto_row61,
        lexer_goto_row62,
-       lexer_goto_row63,
-       lexer_goto_row64,
        lexer_goto_row_null,
+       lexer_goto_row64,
        lexer_goto_row_null,
        lexer_goto_row_null,
+       lexer_goto_row67,
        lexer_goto_row68,
        lexer_goto_row69,
+       lexer_goto_row70,
        lexer_goto_row_null,
-       lexer_goto_row71,
-       lexer_goto_row72,
-       lexer_goto_row73,
        lexer_goto_row_null,
-       lexer_goto_row75,
-       lexer_goto_row76,
        lexer_goto_row_null,
+       lexer_goto_row74,
+       lexer_goto_row75,
        lexer_goto_row_null,
+       lexer_goto_row77,
+       lexer_goto_row78,
        lexer_goto_row79,
-       lexer_goto_row80,
+       lexer_goto_row_null,
        lexer_goto_row81,
        lexer_goto_row82,
-       lexer_goto_row83,
-       lexer_goto_row84,
+       lexer_goto_row_null,
+       lexer_goto_row_null,
        lexer_goto_row85,
        lexer_goto_row86,
        lexer_goto_row87,
        lexer_goto_row88,
        lexer_goto_row89,
-       lexer_goto_row90,
+       lexer_goto_row_null,
        lexer_goto_row91,
        lexer_goto_row92,
        lexer_goto_row93,
@@ -2025,33 +2042,33 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row127,
        lexer_goto_row128,
        lexer_goto_row129,
-       lexer_goto_row_null,
+       lexer_goto_row130,
        lexer_goto_row131,
-       lexer_goto_row_null,
+       lexer_goto_row132,
        lexer_goto_row133,
-       lexer_goto_row_null,
+       lexer_goto_row134,
        lexer_goto_row135,
-       lexer_goto_row136,
        lexer_goto_row_null,
+       lexer_goto_row137,
        lexer_goto_row_null,
        lexer_goto_row139,
-       lexer_goto_row140,
        lexer_goto_row_null,
+       lexer_goto_row141,
        lexer_goto_row_null,
        lexer_goto_row143,
        lexer_goto_row144,
-       lexer_goto_row145,
        lexer_goto_row_null,
        lexer_goto_row_null,
+       lexer_goto_row147,
+       lexer_goto_row148,
+       lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row149,
-       lexer_goto_row150,
        lexer_goto_row151,
        lexer_goto_row152,
        lexer_goto_row153,
-       lexer_goto_row154,
-       lexer_goto_row155,
-       lexer_goto_row156,
+       lexer_goto_row_null,
+       lexer_goto_row_null,
+       lexer_goto_row_null,
        lexer_goto_row157,
        lexer_goto_row158,
        lexer_goto_row159,
@@ -2106,19 +2123,19 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row208,
        lexer_goto_row209,
        lexer_goto_row210,
-       lexer_goto_row_null,
+       lexer_goto_row211,
        lexer_goto_row212,
        lexer_goto_row213,
        lexer_goto_row214,
-       lexer_goto_row_null,
+       lexer_goto_row215,
        lexer_goto_row216,
        lexer_goto_row217,
        lexer_goto_row218,
-       lexer_goto_row219,
+       lexer_goto_row_null,
        lexer_goto_row220,
        lexer_goto_row221,
        lexer_goto_row222,
-       lexer_goto_row223,
+       lexer_goto_row_null,
        lexer_goto_row224,
        lexer_goto_row225,
        lexer_goto_row226,
@@ -2205,7 +2222,7 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row307,
        lexer_goto_row308,
        lexer_goto_row309,
-       lexer_goto_row_null,
+       lexer_goto_row310,
        lexer_goto_row311,
        lexer_goto_row312,
        lexer_goto_row313,
@@ -2213,7 +2230,7 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row315,
        lexer_goto_row316,
        lexer_goto_row317,
-       lexer_goto_row318,
+       lexer_goto_row_null,
        lexer_goto_row319,
        lexer_goto_row320,
        lexer_goto_row321,
@@ -2253,16957 +2270,18303 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row355,
        lexer_goto_row356,
        lexer_goto_row357,
-       lexer_goto_row_null,
+       lexer_goto_row358,
        lexer_goto_row359,
        lexer_goto_row360,
-       lexer_goto_row361
+       lexer_goto_row361,
+       lexer_goto_row362,
+       lexer_goto_row363,
+       lexer_goto_row364,
+       lexer_goto_row365,
+       lexer_goto_row_null,
+       lexer_goto_row367,
+       lexer_goto_row368,
+       lexer_goto_row369
 };
 
 const int lexer_accept_table[] = {
-       -1,0,1,1,0,87,100,2,77,-1,53,54,74,72,57,73,71,76,92,92,58,80,60,83,88,89,55,56,-1,-1,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,100,1,79,100,95,-1,96,2,2,2,65,101,101,101,75,63,61,62,70,94,64,-1,-1,-1,59,82,81,78,84,85,89,89,89,89,-1,91,-1,90,90,90,90,90,90,47,90,90,90,16,90,90,90,90,90,90,23,90,29,15,90,90,90,90,90,90,90,31,90,90,90,90,90,90,90,90,90,90,90,90,90,100,98,-1,97,100,95,100,100,2,99,100,101,66,69,93,93,93,67,86,68,-1,91,91,91,91,-1,-1,-1,90,90,30,90,90,90,90,90,10,90,90,90,28,11,90,90,90,40,90,90,90,90,39,32,90,90,90,90,90,90,90,90,90,90,90,90,90,90,17,90,90,100,100,100,100,100,-1,-1,-1,100,100,100,-1,-1,99,-1,-1,-1,102,90,90,90,90,90,90,25,9,90,90,90,90,13,90,90,90,90,27,90,46,41,90,90,90,90,90,90,43,90,24,44,12,90,90,51,100,-1,-1,98,-1,97,-1,-1,100,-1,-1,100,100,100,-1,-1,100,-1,37,90,90,36,6,90,90,45,90,90,90,90,49,50,90,90,90,90,90,90,14,90,42,90,26,-1,-1,-1,-1,-1,-1,100,-1,-1,95,-1,-1,96,100,100,100,95,-1,100,-1,90,38,90,18,90,5,90,90,4,90,90,90,90,19,34,90,-1,98,-1,-1,97,95,96,100,-1,90,90,33,90,22,90,3,21,90,90,98,97,-1,7,35,90,48,90,90,52,8,20,9
+       -1,0,1,1,0,94,108,2,80,83,-1,53,54,77,75,57,76,74,79,100,100,58,96,87,60,90,95,97,55,56,82,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,81,108,84,1,86,108,103,-1,104,2,2,2,65,69,109,109,109,78,63,61,62,73,102,64,-1,-1,-1,59,89,88,85,91,92,97,97,97,97,68,-1,99,-1,98,98,98,98,98,98,47,98,98,98,16,98,98,98,98,98,98,23,98,29,15,98,98,98,98,98,98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,98,67,108,106,-1,105,108,103,108,108,2,107,108,109,66,72,101,101,101,70,93,71,-1,99,99,99,99,-1,-1,-1,98,98,30,98,98,98,98,98,10,98,98,98,28,11,98,98,98,40,98,98,98,98,39,32,98,98,98,98,98,98,98,98,98,98,98,98,98,98,17,98,98,108,108,108,108,108,-1,-1,-1,108,108,108,-1,-1,107,-1,-1,-1,110,98,98,98,98,98,98,25,9,98,98,98,98,13,98,98,98,98,27,98,46,41,98,98,98,98,98,98,43,98,24,44,12,98,98,51,108,-1,-1,106,-1,105,-1,-1,108,-1,-1,108,108,108,-1,-1,108,-1,37,98,98,36,6,98,98,45,98,98,98,98,49,50,98,98,98,98,98,98,14,98,42,98,26,-1,-1,-1,-1,-1,-1,108,-1,-1,103,-1,-1,104,108,108,108,103,-1,108,-1,98,38,98,18,98,5,98,98,4,98,98,98,98,19,34,98,-1,106,-1,-1,105,103,104,108,-1,98,98,33,98,22,98,3,21,98,98,106,105,-1,7,35,98,48,98,98,52,8,20,9
 };
 
 static int parser_action_row1[] = {
-       4,
-       -1, 1, 458,
+       7,
+       -1, 1, 485,
        0, 0, 1,
        1, 0, 2,
-       102, 1, 22
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row2[] = {
        1,
-       -1, 1, 1025
+       -1, 1, 489
 };
 static int parser_action_row3[] = {
        1,
-       -1, 1, 1023
+       -1, 1, 1088
 };
 static int parser_action_row4[] = {
-       2,
-       -1, 3, 3,
-       102, 2, -1
-};
-static int parser_action_row5[] = {
        4,
-       -1, 1, 458,
+       -1, 1, 477,
        0, 0, 1,
        1, 0, 2,
-       102, 1, 22
+       95, 0, 3
+};
+static int parser_action_row5[] = {
+       2,
+       -1, 3, 4,
+       110, 2, -1
 };
 static int parser_action_row6[] = {
-       1,
-       -1, 1, 989
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row7[] = {
        1,
-       -1, 1, 993
+       -1, 1, 1054
 };
 static int parser_action_row8[] = {
        1,
-       -1, 1, 0
+       -1, 1, 1058
 };
 static int parser_action_row9[] = {
        1,
-       -1, 1, 21
+       -1, 1, 0
 };
 static int parser_action_row10[] = {
        1,
-       -1, 1, 19
+       -1, 1, 21
 };
 static int parser_action_row11[] = {
        1,
-       -1, 1, 991
+       -1, 1, 19
 };
 static int parser_action_row12[] = {
-       2,
-       -1, 1, 459,
-       102, 1, 23
+       1,
+       -1, 1, 1056
 };
 static int parser_action_row13[] = {
-       35,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       28, 0, 33,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55,
-       101, 0, 56
+       2,
+       -1, 1, 486,
+       110, 1, 23
 };
 static int parser_action_row14[] = {
-       2,
-       -1, 1, 457,
-       1, 0, 2
+       33,
+       -1, 1, 30,
+       12, 0, 31,
+       13, 0, 32,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row15[] = {
        3,
        -1, 3, 14,
-       0, 0, 83,
-       1, 0, 84
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row16[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 1090
 };
 static int parser_action_row17[] = {
        4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       -1, 3, 16,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row18[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 488
 };
 static int parser_action_row19[] = {
-       3,
-       -1, 1, 455,
+       7,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 97
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row20[] = {
-       2,
-       -1, 1, 462,
-       0, 0, 99
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row21[] = {
-       1,
-       -1, 1, 1
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row22[] = {
-       35,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       28, 0, 33,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55,
-       101, 0, 56
+       7,
+       -1, 1, 474,
+       0, 0, 102,
+       1, 0, 103,
+       9, 1, 1051,
+       28, 1, 1051,
+       95, 0, 104,
+       109, 1, 1051
 };
 static int parser_action_row23[] = {
-       4,
-       -1, 1, 458,
+       7,
+       -1, 1, 476,
        0, 0, 1,
        1, 0, 2,
-       102, 1, 22
+       9, 1, 1053,
+       28, 1, 1053,
+       95, 0, 105,
+       109, 1, 1053
 };
 static int parser_action_row24[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 481
 };
 static int parser_action_row25[] = {
        4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       -1, 1, 474,
+       0, 0, 102,
+       1, 0, 103,
+       95, 0, 104
 };
 static int parser_action_row26[] = {
-       27,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 334,
-       68, 1, 334,
-       70, 1, 334,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       4,
+       -1, 1, 476,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 105
 };
 static int parser_action_row27[] = {
        1,
-       -1, 1, 29
+       -1, 1, 1
 };
 static int parser_action_row28[] = {
        33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 143,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       -1, 1, 30,
+       12, 0, 31,
+       13, 0, 32,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row29[] = {
-       2,
-       -1, 3, 28,
-       89, 0, 148
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row30[] = {
-       3,
-       -1, 1, 458,
+       7,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row31[] = {
-       3,
-       -1, 1, 458,
+       5,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row32[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 143,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 353,
+       73, 1, 353,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row33[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 31
 };
 static int parser_action_row34[] = {
-       3,
+       34,
        -1, 1, 458,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row35[] = {
-       25,
-       -1, 1, 163,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 34,
+       97, 0, 162
 };
 static int parser_action_row36[] = {
-       2,
-       -1, 1, 168,
-       49, 0, 178
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row37[] = {
-       2,
-       -1, 1, 165,
-       49, 0, 178
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row38[] = {
-       1,
-       -1, 1, 167
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row39[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 181,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row40[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row40[] = {
+       26,
+       -1, 1, 169,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
 static int parser_action_row41[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 174,
+       49, 0, 197
 };
 static int parser_action_row42[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 171,
+       49, 0, 197
 };
 static int parser_action_row43[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 173
 };
 static int parser_action_row44[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 200,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row45[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row46[] = {
        2,
-       -1, 3, 45,
-       11, 0, 192
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row47[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row48[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row49[] = {
        2,
-       -1, 3, 48,
-       58, 0, 195
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row50[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 322,
-       58, 0, 196,
-       59, 0, 197,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 322,
-       70, 1, 322,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row51[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 3, 50,
+       11, 0, 211
 };
 static int parser_action_row52[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row53[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row54[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 3, 53,
+       58, 0, 214
 };
 static int parser_action_row55[] = {
-       1,
-       -1, 1, 376
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 341,
+       58, 0, 215,
+       59, 0, 216,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 341,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row56[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row57[] = {
-       1,
-       -1, 1, 135
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row58[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row59[] = {
        2,
-       -1, 3, 58,
-       101, 0, 219
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row60[] = {
        1,
-       -1, 1, 139
+       -1, 1, 397
 };
 static int parser_action_row61[] = {
-       1,
-       -1, 1, 24
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row62[] = {
-       1,
-       -1, 1, 25
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row63[] = {
-       3,
-       -1, 1, 154,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 24
 };
 static int parser_action_row64[] = {
        1,
-       -1, 1, 161
+       -1, 1, 25
 };
 static int parser_action_row65[] = {
-       1,
-       -1, 1, 162
+       4,
+       -1, 1, 160,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row66[] = {
        1,
-       -1, 1, 170
+       -1, 1, 167
 };
 static int parser_action_row67[] = {
        1,
-       -1, 1, 171
+       -1, 1, 168
 };
 static int parser_action_row68[] = {
        1,
-       -1, 1, 173
+       -1, 1, 176
 };
 static int parser_action_row69[] = {
        1,
-       -1, 1, 172
+       -1, 1, 177
 };
 static int parser_action_row70[] = {
        1,
-       -1, 1, 174
+       -1, 1, 179
 };
 static int parser_action_row71[] = {
        1,
-       -1, 1, 175
+       -1, 1, 178
 };
 static int parser_action_row72[] = {
        1,
-       -1, 1, 176
+       -1, 1, 180
 };
 static int parser_action_row73[] = {
-       4,
-       -1, 3, 72,
-       54, 0, 223,
-       68, 0, 224,
-       70, 0, 225
+       1,
+       -1, 1, 181
 };
 static int parser_action_row74[] = {
        1,
-       -1, 1, 310
+       -1, 1, 182
 };
 static int parser_action_row75[] = {
-       1,
-       -1, 1, 358
+       3,
+       -1, 3, 74,
+       54, 0, 244,
+       73, 0, 245
 };
 static int parser_action_row76[] = {
        1,
-       -1, 1, 357
+       -1, 1, 329
 };
 static int parser_action_row77[] = {
-       3,
-       -1, 3, 76,
-       96, 0, 227,
-       97, 0, 228
+       1,
+       -1, 1, 379
 };
 static int parser_action_row78[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 378
 };
 static int parser_action_row79[] = {
        3,
        -1, 3, 78,
-       41, 0, 234,
-       90, 0, 235
+       104, 0, 247,
+       105, 0, 248
 };
 static int parser_action_row80[] = {
-       1,
-       -1, 1, 1021
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row81[] = {
        3,
-       -1, 1, 437,
-       12, 0, 236,
-       89, 0, 237
+       -1, 3, 80,
+       41, 0, 254,
+       98, 0, 255
 };
 static int parser_action_row82[] = {
-       4,
-       -1, 1, 439,
-       12, 0, 238,
-       88, 0, 48,
-       89, 0, 239
+       1,
+       -1, 1, 1086
 };
 static int parser_action_row83[] = {
        3,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 97
+       -1, 1, 455,
+       12, 0, 256,
+       97, 0, 257
 };
 static int parser_action_row84[] = {
-       1,
-       -1, 1, 454
+       4,
+       -1, 1, 457,
+       12, 0, 258,
+       96, 0, 53,
+       97, 0, 259
 };
 static int parser_action_row85[] = {
-       1,
-       -1, 1, 453
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row86[] = {
        1,
-       -1, 1, 20
+       -1, 1, 141
 };
 static int parser_action_row87[] = {
-       1,
-       -1, 1, 990
+       2,
+       -1, 3, 86,
+       109, 0, 263
 };
 static int parser_action_row88[] = {
        1,
-       -1, 1, 2
+       -1, 1, 145
 };
 static int parser_action_row89[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 472
 };
 static int parser_action_row90[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 471
 };
 static int parser_action_row91[] = {
        1,
-       -1, 1, 4
+       -1, 1, 473
 };
 static int parser_action_row92[] = {
        1,
-       -1, 1, 992
+       -1, 1, 20
 };
 static int parser_action_row93[] = {
-       35,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       28, 0, 33,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55,
-       101, 0, 56
+       1,
+       -1, 1, 1055
 };
 static int parser_action_row94[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 2
 };
 static int parser_action_row95[] = {
-       1,
-       -1, 1, 994
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row96[] = {
-       1,
-       -1, 1, 8
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row97[] = {
-       33,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 4
 };
 static int parser_action_row98[] = {
        1,
-       -1, 1, 1024
+       -1, 1, 1057
 };
 static int parser_action_row99[] = {
-       2,
-       -1, 1, 460,
-       0, 0, 99
+       33,
+       -1, 1, 30,
+       12, 0, 31,
+       13, 0, 32,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row100[] = {
-       1,
-       -1, 1, 1026
-};
-static int parser_action_row101[] = {
        5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
+};
+static int parser_action_row101[] = {
+       1,
+       -1, 1, 1059
 };
 static int parser_action_row102[] = {
        1,
-       -1, 1, 3
+       -1, 1, 8
 };
 static int parser_action_row103[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1,
+       -1, 1, 490
 };
 static int parser_action_row104[] = {
+       1,
+       -1, 1, 1089
+};
+static int parser_action_row105[] = {
        4,
-       -1, 1, 458,
+       -1, 1, 479,
        0, 0, 1,
        1, 0, 2,
-       102, 1, 22
-};
-static int parser_action_row105[] = {
-       1,
-       -1, 1, 5
+       95, 0, 3
 };
 static int parser_action_row106[] = {
        4,
-       -1, 1, 458,
+       -1, 1, 478,
        0, 0, 1,
        1, 0, 2,
-       102, 1, 22
+       95, 0, 3
 };
 static int parser_action_row107[] = {
        1,
-       -1, 1, 9
+       -1, 1, 1091
 };
 static int parser_action_row108[] = {
-       2,
-       -1, 1, 718,
-       52, 0, 253
+       7,
+       -1, 1, 475,
+       0, 0, 102,
+       1, 0, 103,
+       9, 1, 1052,
+       28, 1, 1052,
+       95, 0, 271,
+       109, 1, 1052
 };
 static int parser_action_row109[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 475,
+       0, 0, 102,
+       1, 0, 103,
+       95, 0, 271
 };
 static int parser_action_row110[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row111[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 3
 };
 static int parser_action_row112[] = {
-       3,
-       -1, 1, 458,
+       7,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row113[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row114[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 5
 };
 static int parser_action_row115[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row116[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 9
 };
 static int parser_action_row117[] = {
-       15,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 263,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 1, 768,
+       52, 0, 277
 };
 static int parser_action_row118[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row119[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row120[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row121[] = {
        3,
-       -1, 1, 706,
-       52, 0, 253,
-       58, 0, 196
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row122[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row123[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row124[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row125[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row126[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       15,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 287,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row127[] = {
-       1,
-       -1, 1, 741
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row128[] = {
-       1,
-       -1, 1, 333
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row129[] = {
-       1,
-       -1, 1, 187
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row130[] = {
-       3,
-       -1, 3, 129,
-       41, 0, 275,
-       90, 0, 276
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row131[] = {
-       2,
-       -1, 1, 437,
-       89, 0, 277
+       3,
+       -1, 1, 756,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row132[] = {
-       1,
-       -1, 1, 421
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row133[] = {
-       4,
-       -1, 1, 656,
-       29, 0, 278,
-       30, 0, 279,
-       32, 0, 280
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row134[] = {
-       1,
-       -1, 1, 658
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row135[] = {
-       3,
-       -1, 1, 663,
-       81, 0, 281,
-       84, 0, 282
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row136[] = {
-       11,
-       -1, 1, 665,
-       39, 0, 283,
-       71, 0, 284,
-       72, 0, 285,
-       77, 0, 286,
-       78, 0, 287,
-       79, 0, 288,
-       80, 0, 289,
-       82, 0, 290,
-       83, 0, 291,
-       85, 0, 292
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row137[] = {
-       4,
-       -1, 1, 676,
-       73, 0, 293,
-       75, 0, 294,
-       76, 0, 295
+       1,
+       -1, 1, 793
 };
 static int parser_action_row138[] = {
        1,
-       -1, 1, 679
+       -1, 1, 352
 };
 static int parser_action_row139[] = {
-       2,
-       -1, 1, 683,
-       74, 0, 296
+       1,
+       -1, 1, 193
 };
 static int parser_action_row140[] = {
-       1,
-       -1, 1, 685
+       3,
+       -1, 3, 139,
+       41, 0, 300,
+       98, 0, 301
 };
 static int parser_action_row141[] = {
-       4,
-       -1, 1, 689,
-       54, 0, 223,
-       68, 0, 297,
-       70, 0, 298
+       2,
+       -1, 1, 455,
+       97, 0, 302
 };
 static int parser_action_row142[] = {
        1,
-       -1, 1, 694
+       -1, 1, 440
 };
 static int parser_action_row143[] = {
-       3,
-       -1, 1, 439,
-       88, 0, 48,
-       89, 0, 300
+       4,
+       -1, 1, 698,
+       29, 0, 303,
+       30, 0, 304,
+       32, 0, 305
 };
 static int parser_action_row144[] = {
-       2,
-       -1, 1, 152,
-       49, 1, 919
+       1,
+       -1, 1, 700
 };
 static int parser_action_row145[] = {
        1,
-       -1, 1, 248
+       -1, 1, 705
 };
 static int parser_action_row146[] = {
-       1,
-       -1, 1, 153
+       10,
+       -1, 1, 707,
+       39, 0, 306,
+       80, 0, 307,
+       84, 0, 308,
+       85, 0, 309,
+       86, 0, 310,
+       87, 0, 311,
+       89, 0, 312,
+       90, 0, 313,
+       92, 0, 314
 };
 static int parser_action_row147[] = {
-       31,
-       -1, 1, 440,
-       9, 0, 302,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 716,
+       81, 0, 315
 };
 static int parser_action_row148[] = {
        2,
-       -1, 3, 147,
-       49, 0, 178
+       -1, 1, 718,
+       82, 0, 316
 };
 static int parser_action_row149[] = {
        3,
-       -1, 1, 149,
-       57, 0, 306,
-       87, 0, 185
+       -1, 1, 720,
+       88, 0, 317,
+       91, 0, 318
 };
 static int parser_action_row150[] = {
-       1,
-       -1, 1, 459
+       3,
+       -1, 1, 722,
+       74, 0, 319,
+       75, 0, 320
 };
 static int parser_action_row151[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 1, 725,
+       76, 0, 321,
+       78, 0, 322,
+       79, 0, 323
 };
 static int parser_action_row152[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 728
 };
 static int parser_action_row153[] = {
-       1,
-       -1, 1, 257
+       2,
+       -1, 1, 732,
+       77, 0, 324
 };
 static int parser_action_row154[] = {
-       2,
-       -1, 3, 153,
-       49, 0, 178
+       1,
+       -1, 1, 734
 };
 static int parser_action_row155[] = {
        3,
-       -1, 3, 154,
-       52, 0, 312,
-       89, 0, 313
+       -1, 1, 739,
+       54, 0, 244,
+       73, 0, 325
 };
 static int parser_action_row156[] = {
-       2,
-       -1, 3, 155,
-       94, 0, 316
+       1,
+       -1, 1, 744
 };
 static int parser_action_row157[] = {
-       2,
-       -1, 1, 334,
-       52, 0, 253
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 327
 };
 static int parser_action_row158[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 158,
+       49, 1, 981
 };
 static int parser_action_row159[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 257
 };
 static int parser_action_row160[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 159
 };
 static int parser_action_row161[] = {
-       3,
+       31,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       9, 0, 329,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row162[] = {
-       17,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 161,
+       49, 0, 197
 };
 static int parser_action_row163[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 155,
+       57, 0, 333,
+       94, 0, 204
 };
 static int parser_action_row164[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row165[] = {
        3,
-       -1, 1, 322,
-       52, 0, 253,
-       58, 0, 196
+       -1, 1, 1051,
+       0, 0, 102,
+       1, 0, 103
 };
 static int parser_action_row166[] = {
-       1,
-       -1, 1, 164
+       3,
+       -1, 1, 1053,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row167[] = {
-       4,
-       -1, 1, 272,
-       29, 0, 326,
-       30, 0, 327,
-       32, 0, 328
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row168[] = {
        1,
-       -1, 1, 274
+       -1, 1, 268
 };
 static int parser_action_row169[] = {
-       3,
-       -1, 1, 279,
-       81, 0, 329,
-       84, 0, 330
+       2,
+       -1, 3, 168,
+       49, 0, 197
 };
 static int parser_action_row170[] = {
-       11,
-       -1, 1, 281,
-       39, 0, 331,
-       71, 0, 332,
-       72, 0, 333,
-       77, 0, 334,
-       78, 0, 335,
-       79, 0, 336,
-       80, 0, 337,
-       82, 0, 338,
-       83, 0, 339,
-       85, 0, 340
+       3,
+       -1, 3, 169,
+       52, 0, 340,
+       97, 0, 341
 };
 static int parser_action_row171[] = {
-       4,
-       -1, 1, 292,
-       73, 0, 341,
-       75, 0, 342,
-       76, 0, 343
+       2,
+       -1, 1, 353,
+       52, 0, 277
 };
 static int parser_action_row172[] = {
-       1,
-       -1, 1, 295
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row173[] = {
-       2,
-       -1, 1, 299,
-       74, 0, 344
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row174[] = {
-       1,
-       -1, 1, 301
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row175[] = {
-       4,
-       -1, 1, 305,
-       54, 0, 223,
-       68, 0, 224,
-       70, 0, 345
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row176[] = {
-       3,
-       -1, 3, 175,
-       41, 0, 347,
-       90, 0, 348
+       17,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row177[] = {
-       2,
-       -1, 1, 437,
-       89, 0, 349
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row178[] = {
-       3,
-       -1, 1, 439,
-       88, 0, 48,
-       89, 0, 350
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row179[] = {
-       2,
-       -1, 1, 195,
-       89, 0, 352
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row180[] = {
-       1,
-       -1, 1, 169
+       3,
+       -1, 1, 341,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row181[] = {
        1,
-       -1, 1, 166
+       -1, 1, 170
 };
 static int parser_action_row182[] = {
        4,
-       -1, 1, 322,
-       52, 0, 253,
-       57, 0, 353,
-       58, 0, 196
+       -1, 1, 283,
+       29, 0, 354,
+       30, 0, 355,
+       32, 0, 356
 };
 static int parser_action_row183[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 285
 };
 static int parser_action_row184[] = {
-       2,
-       -1, 1, 269,
-       24, 0, 355
+       1,
+       -1, 1, 290
 };
 static int parser_action_row185[] = {
-       3,
-       -1, 3, 184,
-       47, 0, 356,
-       88, 0, 357
+       10,
+       -1, 1, 292,
+       39, 0, 357,
+       80, 0, 358,
+       84, 0, 359,
+       85, 0, 360,
+       86, 0, 361,
+       87, 0, 362,
+       89, 0, 363,
+       90, 0, 364,
+       92, 0, 365
 };
 static int parser_action_row186[] = {
-       3,
-       -1, 1, 28,
-       13, 0, 26,
-       52, 0, 359
+       2,
+       -1, 1, 301,
+       81, 0, 366
 };
 static int parser_action_row187[] = {
-       1,
-       -1, 1, 383
+       2,
+       -1, 1, 303,
+       82, 0, 367
 };
 static int parser_action_row188[] = {
-       1,
-       -1, 1, 348
+       3,
+       -1, 1, 305,
+       88, 0, 368,
+       91, 0, 369
 };
 static int parser_action_row189[] = {
-       1,
-       -1, 1, 349
+       3,
+       -1, 1, 307,
+       74, 0, 370,
+       75, 0, 371
 };
 static int parser_action_row190[] = {
-       1,
-       -1, 1, 350
+       4,
+       -1, 1, 310,
+       76, 0, 372,
+       78, 0, 373,
+       79, 0, 374
 };
 static int parser_action_row191[] = {
        1,
-       -1, 1, 351
+       -1, 1, 313
 };
 static int parser_action_row192[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 362,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 317,
+       77, 0, 375
 };
 static int parser_action_row193[] = {
-       3,
-       -1, 3, 192,
-       47, 0, 365,
-       88, 0, 366
+       1,
+       -1, 1, 319
 };
 static int parser_action_row194[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 324,
+       54, 0, 244,
+       73, 0, 376
 };
 static int parser_action_row195[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 411,
-       27, 0, 412,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 194,
+       41, 0, 378,
+       98, 0, 379
 };
 static int parser_action_row196[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 455,
+       97, 0, 380
 };
 static int parser_action_row197[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 381
 };
 static int parser_action_row198[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 201,
+       97, 0, 383
 };
 static int parser_action_row199[] = {
        1,
-       -1, 1, 239
+       -1, 1, 175
 };
 static int parser_action_row200[] = {
        1,
-       -1, 1, 240
+       -1, 1, 172
 };
 static int parser_action_row201[] = {
-       1,
-       -1, 1, 241
+       4,
+       -1, 1, 341,
+       52, 0, 277,
+       57, 0, 384,
+       58, 0, 215
 };
 static int parser_action_row202[] = {
-       1,
-       -1, 1, 242
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row203[] = {
-       1,
-       -1, 1, 243
+       2,
+       -1, 1, 280,
+       24, 0, 386
 };
 static int parser_action_row204[] = {
-       1,
-       -1, 1, 244
+       3,
+       -1, 3, 203,
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row205[] = {
-       1,
-       -1, 1, 245
+       3,
+       -1, 1, 30,
+       13, 0, 32,
+       52, 0, 390
 };
 static int parser_action_row206[] = {
        1,
-       -1, 1, 246
+       -1, 1, 404
 };
 static int parser_action_row207[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 369
 };
 static int parser_action_row208[] = {
-       10,
-       -1, 1, 321,
-       59, 0, 420,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 370
 };
 static int parser_action_row209[] = {
        1,
-       -1, 1, 181
+       -1, 1, 371
 };
 static int parser_action_row210[] = {
        1,
-       -1, 1, 352
+       -1, 1, 372
 };
 static int parser_action_row211[] = {
-       1,
-       -1, 1, 353
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 393,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row212[] = {
-       1,
-       -1, 1, 354
+       3,
+       -1, 3, 211,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row213[] = {
-       1,
-       -1, 1, 356
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row214[] = {
-       1,
-       -1, 1, 355
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row215[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row216[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row217[] = {
-       3,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row218[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 245
 };
 static int parser_action_row219[] = {
-       9,
-       -1, 3, 218,
-       3, 0, 426,
-       4, 0, 427,
-       5, 0, 428,
-       6, 0, 429,
-       7, 0, 430,
-       8, 0, 431,
-       10, 0, 432,
-       17, 0, 433
+       1,
+       -1, 1, 246
 };
 static int parser_action_row220[] = {
        1,
-       -1, 1, 136
+       -1, 1, 247
 };
 static int parser_action_row221[] = {
        1,
-       -1, 1, 1005
+       -1, 1, 248
 };
 static int parser_action_row222[] = {
-       32,
-       -1, 1, 156,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 249
 };
 static int parser_action_row223[] = {
-       3,
-       -1, 1, 155,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 250
 };
 static int parser_action_row224[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 251
 };
 static int parser_action_row225[] = {
        1,
-       -1, 1, 347
+       -1, 1, 252
 };
 static int parser_action_row226[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 253
 };
 static int parser_action_row227[] = {
-       10,
-       -1, 1, 335,
-       59, 0, 440,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 254
 };
 static int parser_action_row228[] = {
        1,
-       -1, 1, 379
+       -1, 1, 255
 };
 static int parser_action_row229[] = {
-       1,
-       -1, 1, 380
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row230[] = {
-       1,
-       -1, 1, 1011
+       13,
+       -1, 1, 340,
+       59, 0, 455,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row231[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 187
 };
 static int parser_action_row232[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 373
 };
 static int parser_action_row233[] = {
-       3,
-       -1, 3, 232,
-       96, 0, 227,
-       97, 0, 228
+       1,
+       -1, 1, 374
 };
 static int parser_action_row234[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       96, 1, 375,
-       97, 1, 375,
-       98, 0, 55
+       1,
+       -1, 1, 375
 };
 static int parser_action_row235[] = {
-       27,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 330,
-       68, 1, 330,
-       70, 1, 330,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 377
 };
 static int parser_action_row236[] = {
-       10,
-       -1, 1, 312,
-       59, 0, 449,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 376
 };
 static int parser_action_row237[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row238[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 324,
-       59, 0, 453,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 324,
-       70, 1, 324,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row239[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row240[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 328,
-       58, 0, 196,
-       59, 0, 458,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 328,
-       70, 1, 328,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row241[] = {
-       1,
-       -1, 1, 1022
+       9,
+       -1, 3, 240,
+       3, 0, 461,
+       4, 0, 462,
+       5, 0, 463,
+       6, 0, 464,
+       7, 0, 465,
+       8, 0, 466,
+       10, 0, 467,
+       17, 0, 468
 };
 static int parser_action_row242[] = {
-       3,
-       -1, 1, 438,
-       12, 0, 462,
-       89, 0, 463
+       1,
+       -1, 1, 1072
 };
 static int parser_action_row243[] = {
-       2,
-       -1, 1, 461,
-       0, 0, 99
+       32,
+       -1, 1, 162,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row244[] = {
-       1,
-       -1, 1, 6
-};
-static int parser_action_row245[] = {
        4,
-       -1, 1, 458,
+       -1, 1, 161,
        0, 0, 1,
        1, 0, 2,
-       102, 1, 22
+       95, 0, 3
+};
+static int parser_action_row245[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row246[] = {
-       1,
-       -1, 1, 10
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row247[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       13,
+       -1, 1, 354,
+       59, 0, 475,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row248[] = {
        1,
-       -1, 1, 12
+       -1, 1, 400
 };
 static int parser_action_row249[] = {
-       8,
-       -1, 3, 248,
-       4, 0, 427,
-       5, 0, 428,
-       6, 0, 429,
-       7, 0, 430,
-       8, 0, 431,
-       10, 0, 432,
-       17, 0, 433
+       1,
+       -1, 1, 401
 };
 static int parser_action_row250[] = {
        1,
-       -1, 1, 7
+       -1, 1, 1078
 };
 static int parser_action_row251[] = {
-       4,
-       -1, 1, 458,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       102, 1, 22
+       1, 0, 2
 };
 static int parser_action_row252[] = {
-       1,
-       -1, 1, 11
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row253[] = {
-       1,
-       -1, 1, 13
+       3,
+       -1, 3, 252,
+       104, 0, 247,
+       105, 0, 248
 };
 static int parser_action_row254[] = {
-       3,
+       26,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       104, 1, 396,
+       105, 1, 396,
+       106, 0, 60
 };
 static int parser_action_row255[] = {
-       1,
-       -1, 1, 717
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 349,
+       73, 1, 349,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row256[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       13,
+       -1, 1, 331,
+       59, 0, 484,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row257[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row258[] = {
-       3,
-       -1, 3, 257,
-       47, 0, 356,
-       88, 0, 357
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 343,
+       59, 0, 488,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 343,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row259[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row260[] = {
-       1,
-       -1, 1, 732
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 347,
+       58, 0, 215,
+       59, 0, 493,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 347,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row261[] = {
        1,
-       -1, 1, 733
+       -1, 1, 1087
 };
 static int parser_action_row262[] = {
-       1,
-       -1, 1, 734
+       3,
+       -1, 1, 456,
+       12, 0, 497,
+       97, 0, 498
 };
 static int parser_action_row263[] = {
-       1,
-       -1, 1, 735
+       2,
+       -1, 3, 262,
+       102, 0, 499
 };
 static int parser_action_row264[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 142
 };
 static int parser_action_row265[] = {
-       3,
-       -1, 3, 264,
-       41, 0, 275,
-       90, 0, 473
+       1,
+       -1, 1, 6
 };
 static int parser_action_row266[] = {
-       4,
-       -1, 3, 265,
-       54, 0, 223,
-       68, 0, 297,
-       70, 0, 474
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row267[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       53, 0, 475,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 10
 };
 static int parser_action_row268[] = {
-       1,
-       -1, 1, 687
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row269[] = {
        1,
-       -1, 1, 686
+       -1, 1, 12
 };
 static int parser_action_row270[] = {
        1,
-       -1, 1, 705
+       -1, 1, 483
 };
 static int parser_action_row271[] = {
        1,
-       -1, 1, 736
+       -1, 1, 482
 };
 static int parser_action_row272[] = {
-       1,
-       -1, 1, 737
-};
-static int parser_action_row273[] = {
-       1,
-       -1, 1, 738
+       4,
+       -1, 1, 480,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
+};
+static int parser_action_row273[] = {
+       8,
+       -1, 3, 272,
+       4, 0, 462,
+       5, 0, 463,
+       6, 0, 464,
+       7, 0, 465,
+       8, 0, 466,
+       10, 0, 467,
+       17, 0, 468
 };
 static int parser_action_row274[] = {
        1,
-       -1, 1, 740
+       -1, 1, 7
 };
 static int parser_action_row275[] = {
-       1,
-       -1, 1, 739
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row276[] = {
-       2,
-       -1, 1, 714,
-       52, 0, 253
+       1,
+       -1, 1, 11
 };
 static int parser_action_row277[] = {
        1,
-       -1, 1, 696
+       -1, 1, 13
 };
 static int parser_action_row278[] = {
-       2,
-       -1, 1, 708,
-       52, 0, 253
-};
-static int parser_action_row279[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row279[] = {
+       1,
+       -1, 1, 767
+};
 static int parser_action_row280[] = {
-       4,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 481
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row281[] = {
-       3,
+       21,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row282[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 281,
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row283[] = {
-       3,
+       22,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row284[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 784
 };
 static int parser_action_row285[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 785
 };
 static int parser_action_row286[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 786
 };
 static int parser_action_row287[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 787
 };
 static int parser_action_row288[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row289[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 288,
+       41, 0, 300,
+       98, 0, 510
 };
 static int parser_action_row290[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 289,
+       54, 0, 244,
+       73, 0, 511
 };
 static int parser_action_row291[] = {
-       3,
+       25,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       53, 0, 512,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row292[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 736
 };
 static int parser_action_row293[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 735
 };
 static int parser_action_row294[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 737
 };
 static int parser_action_row295[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 755
 };
 static int parser_action_row296[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 788
 };
 static int parser_action_row297[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 789
 };
 static int parser_action_row298[] = {
        1,
-       -1, 1, 731
+       -1, 1, 790
 };
 static int parser_action_row299[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 792
 };
 static int parser_action_row300[] = {
        1,
-       -1, 1, 719
+       -1, 1, 791
 };
 static int parser_action_row301[] = {
-       3,
-       -1, 1, 712,
-       52, 0, 253,
-       58, 0, 196
+       2,
+       -1, 1, 764,
+       52, 0, 277
 };
 static int parser_action_row302[] = {
-       2,
-       -1, 1, 438,
-       89, 0, 502
+       1,
+       -1, 1, 746
 };
 static int parser_action_row303[] = {
        2,
-       -1, 1, 151,
-       49, 1, 918
+       -1, 1, 758,
+       52, 0, 277
 };
 static int parser_action_row304[] = {
-       2,
-       -1, 1, 150,
-       49, 1, 917
-};
-static int parser_action_row305[] = {
        3,
-       -1, 3, 304,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row305[] = {
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       24, 0, 520
+};
 static int parser_action_row306[] = {
-       1,
-       -1, 1, 247
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row307[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row308[] = {
-       2,
-       -1, 1, 197,
-       59, 0, 506
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row309[] = {
-       2,
-       -1, 1, 149,
-       57, 0, 306
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row310[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row311[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row312[] = {
-       1,
-       -1, 1, 256
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row313[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row314[] = {
-       1,
-       -1, 1, 431
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row315[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row316[] = {
-       2,
-       -1, 1, 430,
-       56, 0, 512
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row317[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row318[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row319[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 156,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row320[] = {
        3,
-       -1, 3, 319,
-       47, 0, 356,
-       88, 0, 357
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row321[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row322[] = {
-       4,
-       -1, 3, 321,
-       54, 0, 223,
-       68, 0, 224,
-       70, 0, 518
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row323[] = {
        3,
-       -1, 3, 322,
-       41, 0, 347,
-       90, 0, 519
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row324[] = {
-       1,
-       -1, 1, 303
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row325[] = {
-       1,
-       -1, 1, 302
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row326[] = {
-       1,
-       -1, 1, 321
-};
-static int parser_action_row327[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row327[] = {
+       1,
+       -1, 1, 769
+};
 static int parser_action_row328[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 521
+       3,
+       -1, 1, 762,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row329[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 456,
+       97, 0, 544
 };
 static int parser_action_row330[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 157,
+       49, 1, 980
 };
 static int parser_action_row331[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 156,
+       49, 1, 979
 };
 static int parser_action_row332[] = {
-       3,
-       -1, 1, 458,
+       4,
+       -1, 3, 331,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row333[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 256
 };
 static int parser_action_row334[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row335[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 203,
+       59, 0, 548
 };
 static int parser_action_row336[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row337[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row338[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 1052,
+       0, 0, 102,
+       1, 0, 103
 };
 static int parser_action_row339[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row340[] = {
+       1,
+       -1, 1, 267
+};
+static int parser_action_row341[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row341[] = {
-       3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row342[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 449
 };
 static int parser_action_row343[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row344[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 448,
+       56, 0, 554
 };
 static int parser_action_row345[] = {
-       3,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row346[] = {
-       3,
+       23,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row347[] = {
-       1,
-       -1, 1, 335
+       3,
+       -1, 3, 346,
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row348[] = {
-       2,
-       -1, 1, 330,
-       52, 0, 253
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row349[] = {
-       1,
-       -1, 1, 312
+       3,
+       -1, 3, 348,
+       54, 0, 244,
+       73, 0, 559
 };
 static int parser_action_row350[] = {
-       2,
-       -1, 1, 324,
-       52, 0, 253
+       3,
+       -1, 3, 349,
+       41, 0, 378,
+       98, 0, 560
 };
 static int parser_action_row351[] = {
-       3,
-       -1, 1, 328,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 321
 };
 static int parser_action_row352[] = {
-       2,
-       -1, 1, 438,
-       89, 0, 543
+       1,
+       -1, 1, 320
 };
 static int parser_action_row353[] = {
        1,
-       -1, 1, 196
+       -1, 1, 322
 };
 static int parser_action_row354[] = {
        1,
-       -1, 1, 271
+       -1, 1, 340
 };
 static int parser_action_row355[] = {
-       2,
-       -1, 1, 270,
-       24, 0, 544
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row356[] = {
-       33,
-       -1, 1, 440,
+       4,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24, 0, 562
 };
 static int parser_action_row357[] = {
-       2,
-       -1, 3, 356,
-       88, 0, 548
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row358[] = {
        3,
-       -1, 1, 745,
-       54, 0, 549,
-       87, 0, 550
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row359[] = {
-       2,
-       -1, 3, 358,
-       70, 0, 553
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row360[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row361[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row362[] = {
-       1,
-       -1, 1, 381
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row363[] = {
-       6,
-       -1, 1, 322,
-       52, 0, 253,
-       57, 0, 306,
-       58, 0, 196,
-       59, 1, 149,
-       87, 0, 185
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row364[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row365[] = {
-       1,
-       -1, 1, 266
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row366[] = {
-       2,
-       -1, 3, 365,
-       88, 0, 559
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row367[] = {
        3,
-       -1, 1, 384,
-       54, 0, 560,
-       87, 0, 185
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row368[] = {
-       2,
-       -1, 3, 367,
-       57, 0, 562
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row369[] = {
-       25,
-       -1, 1, 925,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row370[] = {
-       2,
-       -1, 1, 930,
-       49, 0, 178
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row371[] = {
-       2,
-       -1, 1, 927,
-       49, 0, 178
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row372[] = {
-       1,
-       -1, 1, 929
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row373[] = {
-       2,
-       -1, 3, 372,
-       11, 0, 566
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row374[] = {
-       4,
-       -1, 1, 458,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       55, 0, 567
+       1, 0, 2
 };
 static int parser_action_row375[] = {
-       23,
-       -1, 1, 470,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row376[] = {
-       23,
-       -1, 1, 471,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row377[] = {
-       1,
-       -1, 1, 472
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row378[] = {
        1,
-       -1, 1, 473
+       -1, 1, 354
 };
 static int parser_action_row379[] = {
-       1,
-       -1, 1, 474
+       2,
+       -1, 1, 349,
+       52, 0, 277
 };
 static int parser_action_row380[] = {
        1,
-       -1, 1, 475
+       -1, 1, 331
 };
 static int parser_action_row381[] = {
-       1,
-       -1, 1, 476
+       2,
+       -1, 1, 343,
+       52, 0, 277
 };
 static int parser_action_row382[] = {
-       1,
-       -1, 1, 477
+       3,
+       -1, 1, 347,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row383[] = {
-       1,
-       -1, 1, 480
+       2,
+       -1, 1, 456,
+       97, 0, 587
 };
 static int parser_action_row384[] = {
        1,
-       -1, 1, 478
+       -1, 1, 202
 };
 static int parser_action_row385[] = {
        1,
-       -1, 1, 482
+       -1, 1, 282
 };
 static int parser_action_row386[] = {
-       1,
-       -1, 1, 481
+       2,
+       -1, 1, 281,
+       24, 0, 588
 };
 static int parser_action_row387[] = {
-       1,
-       -1, 1, 479
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row388[] = {
-       1,
-       -1, 1, 483
+       2,
+       -1, 3, 387,
+       96, 0, 592
 };
 static int parser_action_row389[] = {
-       1,
-       -1, 1, 485
+       3,
+       -1, 1, 797,
+       54, 0, 593,
+       94, 0, 594
 };
 static int parser_action_row390[] = {
-       4,
-       -1, 1, 384,
-       54, 0, 560,
-       58, 0, 195,
-       87, 0, 185
+       2,
+       -1, 3, 389,
+       73, 0, 597
 };
 static int parser_action_row391[] = {
-       12,
-       -1, 1, 322,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 568,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row392[] = {
-       1,
-       -1, 1, 409
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row393[] = {
        1,
-       -1, 1, 923
+       -1, 1, 402
 };
 static int parser_action_row394[] = {
-       1,
-       -1, 1, 924
+       6,
+       -1, 1, 341,
+       52, 0, 277,
+       57, 0, 333,
+       58, 0, 215,
+       59, 1, 155,
+       94, 0, 204
 };
 static int parser_action_row395[] = {
-       1,
-       -1, 1, 932
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row396[] = {
        1,
-       -1, 1, 934
+       -1, 1, 277
 };
 static int parser_action_row397[] = {
-       1,
-       -1, 1, 933
+       2,
+       -1, 3, 396,
+       96, 0, 603
 };
 static int parser_action_row398[] = {
-       1,
-       -1, 1, 935
+       3,
+       -1, 1, 405,
+       54, 0, 604,
+       94, 0, 204
 };
 static int parser_action_row399[] = {
-       1,
-       -1, 1, 936
+       2,
+       -1, 3, 398,
+       57, 0, 606
 };
 static int parser_action_row400[] = {
-       1,
-       -1, 1, 937
+       26,
+       -1, 1, 987,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row401[] = {
-       1,
-       -1, 1, 410
+       2,
+       -1, 1, 992,
+       49, 0, 197
 };
 static int parser_action_row402[] = {
-       4,
-       -1, 1, 305,
-       54, 0, 223,
-       68, 0, 224,
-       70, 0, 569
+       2,
+       -1, 1, 989,
+       49, 0, 197
 };
 static int parser_action_row403[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 991
 };
 static int parser_action_row404[] = {
-       1,
-       -1, 1, 414
+       2,
+       -1, 3, 403,
+       11, 0, 610
 };
 static int parser_action_row405[] = {
        4,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2,
-       56, 0, 571
+       55, 0, 611
 };
 static int parser_action_row406[] = {
-       3,
-       -1, 3, 405,
-       41, 0, 347,
-       90, 0, 235
+       24,
+       -1, 1, 498,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row407[] = {
-       18,
-       -1, 1, 437,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 578
+       24,
+       -1, 1, 499,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row408[] = {
        1,
-       -1, 1, 488
+       -1, 1, 500
 };
 static int parser_action_row409[] = {
        1,
-       -1, 1, 413
+       -1, 1, 501
 };
 static int parser_action_row410[] = {
        1,
-       -1, 1, 411
+       -1, 1, 502
 };
 static int parser_action_row411[] = {
-       19,
-       -1, 1, 439,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       88, 0, 48,
-       89, 0, 580
+       1,
+       -1, 1, 503
 };
 static int parser_action_row412[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 504
 };
 static int parser_action_row413[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 505
 };
 static int parser_action_row414[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 506
 };
 static int parser_action_row415[] = {
-       2,
-       -1, 1, 149,
-       57, 0, 306
+       24,
+       -1, 1, 507,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row416[] = {
-       2,
-       -1, 1, 366,
-       56, 0, 587
+       1,
+       -1, 1, 508
 };
 static int parser_action_row417[] = {
        1,
-       -1, 1, 450
+       -1, 1, 509
 };
 static int parser_action_row418[] = {
        1,
-       -1, 1, 449
+       -1, 1, 512
 };
 static int parser_action_row419[] = {
        1,
-       -1, 1, 212
+       -1, 1, 510
 };
 static int parser_action_row420[] = {
        1,
-       -1, 1, 231
+       -1, 1, 514
 };
 static int parser_action_row421[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 513
 };
 static int parser_action_row422[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 511
 };
 static int parser_action_row423[] = {
        1,
-       -1, 1, 80
+       -1, 1, 515
 };
 static int parser_action_row424[] = {
        1,
-       -1, 1, 82
+       -1, 1, 517
 };
 static int parser_action_row425[] = {
-       1,
-       -1, 1, 81
+       4,
+       -1, 1, 405,
+       54, 0, 604,
+       58, 0, 214,
+       94, 0, 204
 };
 static int parser_action_row426[] = {
-       1,
-       -1, 1, 83
+       15,
+       -1, 1, 341,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 612,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row427[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 428
 };
 static int parser_action_row428[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 985
 };
 static int parser_action_row429[] = {
        1,
-       -1, 1, 30
+       -1, 1, 986
 };
 static int parser_action_row430[] = {
-       2,
-       -1, 3, 429,
-       5, 0, 594
+       1,
+       -1, 1, 994
 };
 static int parser_action_row431[] = {
        1,
-       -1, 1, 32
+       -1, 1, 996
 };
 static int parser_action_row432[] = {
        1,
-       -1, 1, 33
+       -1, 1, 995
 };
 static int parser_action_row433[] = {
-       19,
-       -1, 3, 432,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 48,
-       89, 0, 611
+       1,
+       -1, 1, 997
 };
 static int parser_action_row434[] = {
-       2,
-       -1, 3, 433,
-       5, 0, 616
+       1,
+       -1, 1, 998
 };
 static int parser_action_row435[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 999
 };
 static int parser_action_row436[] = {
        1,
-       -1, 1, 160
+       -1, 1, 429
 };
 static int parser_action_row437[] = {
-       1,
-       -1, 1, 1006
+       3,
+       -1, 1, 324,
+       54, 0, 244,
+       73, 0, 613
 };
 static int parser_action_row438[] = {
-       32,
-       -1, 1, 157,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row439[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 433
 };
 static int parser_action_row440[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 619,
-       46, 0, 620,
-       88, 0, 48,
-       89, 0, 621
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 615
 };
 static int parser_action_row441[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 440,
+       41, 0, 378,
+       98, 0, 255
 };
 static int parser_action_row442[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 623
 };
 static int parser_action_row443[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       96, 1, 378,
-       97, 1, 378,
-       98, 0, 55
+       1,
+       -1, 1, 520
 };
 static int parser_action_row444[] = {
        1,
-       -1, 1, 372
+       -1, 1, 432
 };
 static int parser_action_row445[] = {
        1,
-       -1, 1, 1012
+       -1, 1, 430
 };
 static int parser_action_row446[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 625
 };
 static int parser_action_row447[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row448[] = {
-       1,
-       -1, 1, 329
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row449[] = {
-       1,
-       -1, 1, 185
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row450[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row451[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 387,
+       56, 0, 632
 };
 static int parser_action_row452[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 468
 };
 static int parser_action_row453[] = {
        1,
-       -1, 1, 191
+       -1, 1, 467
 };
 static int parser_action_row454[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 218
 };
 static int parser_action_row455[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 237
 };
 static int parser_action_row456[] = {
-       10,
-       -1, 1, 323,
-       59, 0, 635,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row457[] = {
-       1,
-       -1, 1, 182
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row458[] = {
        1,
-       -1, 1, 193
+       -1, 1, 82
 };
 static int parser_action_row459[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 84
 };
 static int parser_action_row460[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 83
 };
 static int parser_action_row461[] = {
-       10,
-       -1, 1, 327,
-       59, 0, 639,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 85
 };
 static int parser_action_row462[] = {
-       1,
-       -1, 1, 184
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row463[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row464[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 326,
-       59, 0, 642,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 326,
-       70, 1, 326,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 32
 };
 static int parser_action_row465[] = {
-       1,
-       -1, 1, 14
+       2,
+       -1, 3, 464,
+       5, 0, 639
 };
 static int parser_action_row466[] = {
-       7,
-       -1, 3, 465,
-       5, 0, 428,
-       6, 0, 429,
-       7, 0, 430,
-       8, 0, 431,
-       10, 0, 432,
-       17, 0, 433
+       1,
+       -1, 1, 34
 };
 static int parser_action_row467[] = {
        1,
-       -1, 1, 15
+       -1, 1, 35
 };
 static int parser_action_row468[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       53, 0, 646,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       23,
+       -1, 3, 467,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row469[] = {
+       2,
+       -1, 3, 468,
+       5, 0, 665
+};
+static int parser_action_row470[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row470[] = {
-       1,
-       -1, 1, 664
-};
 static int parser_action_row471[] = {
-       3,
-       -1, 1, 691,
-       52, 0, 253,
-       70, 0, 649
+       1,
+       -1, 1, 166
 };
 static int parser_action_row472[] = {
        1,
-       -1, 1, 688
+       -1, 1, 1073
 };
 static int parser_action_row473[] = {
-       3,
-       -1, 3, 472,
-       47, 0, 356,
-       88, 0, 357
+       32,
+       -1, 1, 163,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row474[] = {
-       4,
-       -1, 1, 693,
-       54, 1, 696,
-       68, 1, 696,
-       70, 1, 696
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row475[] = {
-       3,
+       5,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 668,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 670
 };
 static int parser_action_row476[] = {
-       8,
-       -1, 1, 419,
-       0, 1, 422,
-       1, 1, 422,
-       9, 1, 422,
-       24, 1, 422,
-       53, 1, 422,
-       56, 1, 422,
-       102, 1, 422
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row477[] = {
-       3,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row478[] = {
-       2,
-       -1, 3, 477,
-       53, 0, 654
+       26,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       104, 1, 399,
+       105, 1, 399,
+       106, 0, 60
 };
 static int parser_action_row479[] = {
        1,
-       -1, 1, 713
+       -1, 1, 393
 };
 static int parser_action_row480[] = {
        1,
-       -1, 1, 707
+       -1, 1, 1079
 };
 static int parser_action_row481[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row482[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row483[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 348
 };
 static int parser_action_row484[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 191
 };
 static int parser_action_row485[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row486[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row487[] = {
        3,
-       -1, 3, 486,
-       47, 0, 365,
-       88, 0, 366
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row488[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 197
 };
 static int parser_action_row489[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row490[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row491[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       13,
+       -1, 1, 342,
+       59, 0, 684,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row492[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 188
 };
 static int parser_action_row493[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 199
 };
 static int parser_action_row494[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row495[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row496[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       13,
+       -1, 1, 346,
+       59, 0, 688,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row497[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 190
 };
 static int parser_action_row498[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row499[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 345,
+       59, 0, 691,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 345,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row500[] = {
-       19,
-       -1, 1, 440,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row501[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 675,
-       46, 0, 676,
-       88, 0, 48,
-       89, 0, 677
+       1,
+       -1, 1, 14
 };
 static int parser_action_row502[] = {
-       1,
-       -1, 1, 711
+       7,
+       -1, 3, 501,
+       5, 0, 463,
+       6, 0, 464,
+       7, 0, 465,
+       8, 0, 466,
+       10, 0, 467,
+       17, 0, 468
 };
 static int parser_action_row503[] = {
-       2,
-       -1, 1, 710,
-       52, 0, 253
+       1,
+       -1, 1, 484
 };
 static int parser_action_row504[] = {
-       31,
-       -1, 1, 440,
-       9, 0, 682,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 15
 };
 static int parser_action_row505[] = {
-       3,
-       -1, 3, 504,
-       0, 0, 1,
-       1, 0, 2
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       53, 0, 696,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row506[] = {
        3,
-       -1, 3, 505,
-       47, 0, 365,
-       88, 0, 366
-};
-static int parser_action_row507[] = {
-       3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row507[] = {
+       1,
+       -1, 1, 706
+};
 static int parser_action_row508[] = {
-       2,
-       -1, 1, 198,
-       59, 0, 686
+       3,
+       -1, 1, 741,
+       52, 0, 277,
+       73, 0, 699
 };
 static int parser_action_row509[] = {
-       2,
-       -1, 3, 508,
-       23, 0, 687
+       1,
+       -1, 1, 738
 };
 static int parser_action_row510[] = {
-       2,
+       3,
        -1, 3, 509,
-       15, 0, 688
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row511[] = {
-       2,
-       -1, 3, 510,
-       89, 0, 313
+       3,
+       -1, 1, 743,
+       54, 1, 746,
+       73, 1, 746
 };
 static int parser_action_row512[] = {
-       2,
-       -1, 3, 511,
-       28, 0, 690
-};
-static int parser_action_row513[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row513[] = {
+       9,
+       -1, 1, 438,
+       0, 1, 441,
+       1, 1, 441,
+       9, 1, 441,
+       24, 1, 441,
+       53, 1, 441,
+       56, 1, 441,
+       95, 1, 441,
+       110, 1, 441
+};
 static int parser_action_row514[] = {
-       1,
-       -1, 1, 134
+       4,
+       -1, 1, 341,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 703
 };
 static int parser_action_row515[] = {
+       2,
+       -1, 1, 366,
+       71, 0, 704
+};
+static int parser_action_row516[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row516[] = {
-       1,
-       -1, 1, 280
-};
 static int parser_action_row517[] = {
-       3,
-       -1, 1, 307,
-       52, 0, 253,
-       70, 0, 553
+       2,
+       -1, 3, 516,
+       53, 0, 706
 };
 static int parser_action_row518[] = {
        1,
-       -1, 1, 304
+       -1, 1, 763
 };
 static int parser_action_row519[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 757
 };
 static int parser_action_row520[] = {
-       4,
-       -1, 1, 309,
-       54, 1, 312,
-       68, 1, 312,
-       70, 1, 312
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row521[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 156,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row522[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row522[] = {
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
+};
 static int parser_action_row523[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 156,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row524[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 156,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 523,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row525[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row526[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row527[] = {
-       3,
-       -1, 3, 526,
-       47, 0, 365,
-       88, 0, 366
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row528[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row529[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row530[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row531[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row532[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row533[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row534[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row535[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row536[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row537[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row538[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row539[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row540[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row541[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 715,
-       46, 0, 620,
-       88, 0, 48,
-       89, 0, 716
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row542[] = {
-       1,
-       -1, 1, 323
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row543[] = {
-       1,
-       -1, 1, 327
+       5,
+       -1, 1, 458,
+       12, 0, 730,
+       46, 0, 731,
+       96, 0, 53,
+       97, 0, 732
 };
 static int parser_action_row544[] = {
-       2,
-       -1, 1, 326,
-       52, 0, 253
+       1,
+       -1, 1, 761
 };
 static int parser_action_row545[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 760,
+       52, 0, 277
 };
 static int parser_action_row546[] = {
-       1,
-       -1, 1, 152
+       31,
+       -1, 1, 458,
+       9, 0, 737,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row547[] = {
-       1,
-       -1, 1, 267
+       4,
+       -1, 3, 546,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row548[] = {
-       31,
-       -1, 1, 440,
-       9, 0, 722,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row549[] = {
        3,
-       -1, 1, 745,
-       54, 0, 724,
-       87, 0, 550
+       -1, 3, 547,
+       47, 0, 396,
+       96, 0, 397
 };
-static int parser_action_row550[] = {
+static int parser_action_row549[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row550[] = {
+       2,
+       -1, 1, 204,
+       59, 0, 741
+};
 static int parser_action_row551[] = {
-       3,
-       -1, 1, 28,
-       13, 0, 26,
-       52, 0, 727
+       2,
+       -1, 3, 550,
+       23, 0, 742
 };
 static int parser_action_row552[] = {
-       1,
-       -1, 1, 744
+       2,
+       -1, 3, 551,
+       15, 0, 743
 };
 static int parser_action_row553[] = {
-       1,
-       -1, 1, 580
+       2,
+       -1, 3, 552,
+       97, 0, 341
 };
 static int parser_action_row554[] = {
+       2,
+       -1, 3, 553,
+       28, 0, 745
+};
+static int parser_action_row555[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row555[] = {
-       2,
-       -1, 1, 28,
-       13, 0, 26
-};
 static int parser_action_row556[] = {
-       4,
-       -1, 3, 555,
-       6, 0, 734,
-       17, 0, 735,
-       89, 0, 736
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row557[] = {
-       2,
-       -1, 3, 556,
-       59, 0, 738
+       1,
+       -1, 1, 291
 };
 static int parser_action_row558[] = {
-       2,
-       -1, 1, 149,
-       57, 0, 306
+       3,
+       -1, 1, 326,
+       52, 0, 277,
+       73, 0, 597
 };
 static int parser_action_row559[] = {
-       2,
-       -1, 3, 558,
-       15, 0, 740
+       1,
+       -1, 1, 323
 };
 static int parser_action_row560[] = {
        3,
-       -1, 1, 384,
-       54, 0, 741,
-       87, 0, 185
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row561[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 328,
+       54, 1, 331,
+       73, 1, 331
 };
 static int parser_action_row562[] = {
-       1,
-       -1, 1, 140
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row563[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row564[] = {
-       1,
-       -1, 1, 926
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row565[] = {
-       1,
-       -1, 1, 931
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row566[] = {
-       1,
-       -1, 1, 928
+       3,
+       -1, 3, 565,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row567[] = {
-       3,
-       -1, 3, 566,
-       47, 0, 365,
-       88, 0, 366
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row568[] = {
-       2,
-       -1, 1, 484,
-       59, 0, 746
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row569[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row570[] = {
-       3,
+       22,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row571[] = {
-       2,
-       -1, 3, 570,
-       53, 0, 748
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row572[] = {
-       3,
+       22,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row573[] = {
-       1,
-       -1, 1, 1007
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row574[] = {
-       2,
-       -1, 3, 573,
-       53, 0, 750
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row575[] = {
-       2,
-       -1, 1, 364,
-       56, 0, 571
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row576[] = {
-       2,
-       -1, 3, 575,
-       55, 0, 567
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row577[] = {
-       1,
-       -1, 1, 470
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row578[] = {
-       1,
-       -1, 1, 471
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row579[] = {
-       11,
-       -1, 1, 324,
-       52, 0, 253,
-       59, 0, 752,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row580[] = {
-       1,
-       -1, 1, 489
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row581[] = {
-       12,
-       -1, 1, 328,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 753,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row582[] = {
-       18,
-       -1, 1, 438,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 754
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row583[] = {
-       1,
-       -1, 1, 491
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row584[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row585[] = {
-       3,
-       -1, 3, 584,
-       52, 0, 312,
-       89, 0, 313
+       5,
+       -1, 1, 458,
+       12, 0, 773,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 774
 };
 static int parser_action_row586[] = {
-       2,
-       -1, 1, 369,
-       69, 0, 758
+       1,
+       -1, 1, 342
 };
 static int parser_action_row587[] = {
-       2,
-       -1, 3, 586,
-       55, 0, 759
+       1,
+       -1, 1, 346
 };
 static int parser_action_row588[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 345,
+       52, 0, 277
 };
 static int parser_action_row589[] = {
-       1,
-       -1, 1, 1009
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row590[] = {
-       2,
-       -1, 1, 367,
-       56, 0, 587
+       1,
+       -1, 1, 158
 };
 static int parser_action_row591[] = {
        1,
-       -1, 1, 211
+       -1, 1, 278
 };
 static int parser_action_row592[] = {
-       1,
-       -1, 1, 230
+       31,
+       -1, 1, 458,
+       9, 0, 780,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row593[] = {
        3,
-       -1, 3, 592,
-       58, 0, 762,
-       89, 0, 763
+       -1, 1, 797,
+       54, 0, 782,
+       94, 0, 594
 };
 static int parser_action_row594[] = {
-       4,
-       -1, 3, 593,
-       9, 0, 766,
-       58, 0, 762,
-       89, 0, 763
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row595[] = {
-       1,
-       -1, 1, 31
+       3,
+       -1, 1, 30,
+       13, 0, 32,
+       52, 0, 785
 };
 static int parser_action_row596[] = {
-       2,
-       -1, 3, 595,
-       55, 0, 768
+       1,
+       -1, 1, 796
 };
 static int parser_action_row597[] = {
        1,
-       -1, 1, 84
+       -1, 1, 622
 };
 static int parser_action_row598[] = {
-       1,
-       -1, 1, 85
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row599[] = {
-       1,
-       -1, 1, 86
+       2,
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row600[] = {
-       1,
-       -1, 1, 87
+       4,
+       -1, 3, 599,
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row601[] = {
-       1,
-       -1, 1, 88
+       2,
+       -1, 3, 600,
+       59, 0, 796
 };
 static int parser_action_row602[] = {
-       1,
-       -1, 1, 89
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row603[] = {
-       1,
-       -1, 1, 90
+       2,
+       -1, 3, 602,
+       15, 0, 798
 };
 static int parser_action_row604[] = {
-       1,
-       -1, 1, 91
+       3,
+       -1, 1, 405,
+       54, 0, 799,
+       94, 0, 204
 };
 static int parser_action_row605[] = {
-       1,
-       -1, 1, 94
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row606[] = {
        1,
-       -1, 1, 92
+       -1, 1, 146
 };
 static int parser_action_row607[] = {
-       1,
-       -1, 1, 96
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row608[] = {
        1,
-       -1, 1, 95
+       -1, 1, 988
 };
 static int parser_action_row609[] = {
        1,
-       -1, 1, 93
+       -1, 1, 993
 };
 static int parser_action_row610[] = {
        1,
-       -1, 1, 97
+       -1, 1, 990
 };
 static int parser_action_row611[] = {
-       1,
-       -1, 1, 99
+       3,
+       -1, 3, 610,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row612[] = {
-       3,
-       -1, 1, 102,
-       58, 0, 196,
-       59, 0, 769
+       2,
+       -1, 1, 516,
+       59, 0, 804
 };
 static int parser_action_row613[] = {
-       1,
-       -1, 1, 445
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row614[] = {
-       5,
-       -1, 1, 458,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       52, 0, 770,
-       57, 0, 771
+       1, 0, 2
 };
 static int parser_action_row615[] = {
-       18,
+       2,
        -1, 3, 614,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       89, 0, 775
+       53, 0, 806
 };
 static int parser_action_row616[] = {
-       19,
-       -1, 3, 615,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 48,
-       89, 0, 611
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row617[] = {
        1,
-       -1, 1, 34
+       -1, 1, 1074
 };
 static int parser_action_row618[] = {
-       3,
+       2,
        -1, 3, 617,
-       88, 0, 779,
-       89, 0, 780
+       53, 0, 808
 };
 static int parser_action_row619[] = {
        2,
-       -1, 3, 618,
-       55, 0, 784
+       -1, 1, 385,
+       56, 0, 615
 };
 static int parser_action_row620[] = {
-       27,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 332,
-       68, 1, 332,
-       70, 1, 332,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 3, 619,
+       55, 0, 611
 };
 static int parser_action_row621[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 498
 };
 static int parser_action_row622[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 314,
-       58, 0, 196,
-       59, 0, 788,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 314,
-       70, 1, 314,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 499
 };
 static int parser_action_row623[] = {
-       2,
-       -1, 3, 622,
-       90, 0, 792
+       1,
+       -1, 1, 507
 };
 static int parser_action_row624[] = {
-       3,
-       -1, 1, 437,
-       12, 0, 793,
-       89, 0, 794
+       14,
+       -1, 1, 343,
+       52, 0, 277,
+       59, 0, 810,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row625[] = {
-       4,
-       -1, 1, 439,
-       12, 0, 795,
-       88, 0, 48,
-       89, 0, 796
+       1,
+       -1, 1, 521
 };
 static int parser_action_row626[] = {
-       1,
-       -1, 1, 219
+       15,
+       -1, 1, 347,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 811,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row627[] = {
-       1,
-       -1, 1, 238
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 812
 };
 static int parser_action_row628[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 523
 };
 static int parser_action_row629[] = {
-       1,
-       -1, 1, 373
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row630[] = {
-       1,
-       -1, 1, 374
+       3,
+       -1, 3, 629,
+       52, 0, 340,
+       97, 0, 341
 };
 static int parser_action_row631[] = {
-       1,
-       -1, 1, 202
+       2,
+       -1, 1, 390,
+       72, 0, 816
 };
 static int parser_action_row632[] = {
-       1,
-       -1, 1, 221
+       2,
+       -1, 3, 631,
+       55, 0, 817
 };
 static int parser_action_row633[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       53, 0, 799,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row634[] = {
        1,
-       -1, 1, 214
+       -1, 1, 1076
 };
 static int parser_action_row635[] = {
-       1,
-       -1, 1, 233
+       2,
+       -1, 1, 388,
+       56, 0, 632
 };
 static int parser_action_row636[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 217
 };
 static int parser_action_row637[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 236
 };
 static int parser_action_row638[] = {
-       1,
-       -1, 1, 218
+       3,
+       -1, 3, 637,
+       58, 0, 820,
+       97, 0, 821
 };
 static int parser_action_row639[] = {
-       1,
-       -1, 1, 237
+       4,
+       -1, 3, 638,
+       9, 0, 824,
+       58, 0, 820,
+       97, 0, 821
 };
 static int parser_action_row640[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 33
 };
 static int parser_action_row641[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 640,
+       55, 0, 826
 };
 static int parser_action_row642[] = {
        1,
-       -1, 1, 192
+       -1, 1, 86
 };
 static int parser_action_row643[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 87
 };
 static int parser_action_row644[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 88
 };
 static int parser_action_row645[] = {
-       10,
-       -1, 1, 325,
-       59, 0, 807,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 89
 };
 static int parser_action_row646[] = {
        1,
-       -1, 1, 183
+       -1, 1, 90
 };
 static int parser_action_row647[] = {
        1,
-       -1, 1, 419
+       -1, 1, 91
 };
 static int parser_action_row648[] = {
-       2,
-       -1, 3, 647,
-       53, 0, 809
+       1,
+       -1, 1, 92
 };
 static int parser_action_row649[] = {
-       2,
-       -1, 3, 648,
-       23, 0, 810
+       1,
+       -1, 1, 93
 };
 static int parser_action_row650[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 94
 };
 static int parser_action_row651[] = {
        1,
-       -1, 1, 690
+       -1, 1, 95
 };
 static int parser_action_row652[] = {
-       2,
-       -1, 3, 651,
-       70, 0, 649
+       1,
+       -1, 1, 96
 };
 static int parser_action_row653[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 675,
-       46, 0, 676,
-       88, 0, 48,
-       89, 0, 677
+       1,
+       -1, 1, 97
 };
 static int parser_action_row654[] = {
-       2,
-       -1, 1, 426,
-       56, 0, 813
+       1,
+       -1, 1, 100
 };
 static int parser_action_row655[] = {
-       8,
-       -1, 1, 418,
-       0, 1, 420,
-       1, 1, 420,
-       9, 1, 420,
-       24, 1, 420,
-       53, 1, 420,
-       56, 1, 420,
-       102, 1, 420
+       1,
+       -1, 1, 98
 };
 static int parser_action_row656[] = {
        1,
-       -1, 1, 660
+       -1, 1, 102
 };
 static int parser_action_row657[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 101
 };
 static int parser_action_row658[] = {
        1,
-       -1, 1, 659
+       -1, 1, 99
 };
 static int parser_action_row659[] = {
        1,
-       -1, 1, 662
+       -1, 1, 103
 };
 static int parser_action_row660[] = {
-       3,
-       -1, 1, 670,
-       71, 0, 284,
-       72, 0, 285
+       1,
+       -1, 1, 105
 };
 static int parser_action_row661[] = {
        3,
-       -1, 1, 673,
-       71, 0, 284,
-       72, 0, 285
+       -1, 1, 108,
+       58, 0, 215,
+       59, 0, 827
 };
 static int parser_action_row662[] = {
        1,
-       -1, 1, 675
+       -1, 1, 463
 };
 static int parser_action_row663[] = {
-       4,
-       -1, 1, 677,
-       73, 0, 293,
-       75, 0, 294,
-       76, 0, 295
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row664[] = {
-       4,
-       -1, 1, 678,
-       73, 0, 293,
-       75, 0, 294,
-       76, 0, 295
+       22,
+       -1, 3, 663,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       97, 0, 833
 };
 static int parser_action_row665[] = {
-       3,
-       -1, 1, 666,
-       71, 0, 284,
-       72, 0, 285
+       23,
+       -1, 3, 664,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row666[] = {
-       3,
-       -1, 1, 667,
-       71, 0, 284,
-       72, 0, 285
+       1,
+       -1, 1, 36
 };
 static int parser_action_row667[] = {
        3,
-       -1, 1, 668,
-       71, 0, 284,
-       72, 0, 285
+       -1, 3, 666,
+       96, 0, 837,
+       97, 0, 838
 };
 static int parser_action_row668[] = {
-       3,
-       -1, 1, 669,
-       71, 0, 284,
-       72, 0, 285
+       2,
+       -1, 3, 667,
+       55, 0, 842
 };
 static int parser_action_row669[] = {
-       3,
-       -1, 1, 671,
-       71, 0, 284,
-       72, 0, 285
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 351,
+       73, 1, 351,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row670[] = {
        3,
-       -1, 1, 672,
-       71, 0, 284,
-       72, 0, 285
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row671[] = {
-       3,
-       -1, 1, 674,
-       71, 0, 284,
-       72, 0, 285
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 333,
+       58, 0, 215,
+       59, 0, 846,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 333,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row672[] = {
-       1,
-       -1, 1, 680
+       2,
+       -1, 3, 671,
+       98, 0, 850
 };
 static int parser_action_row673[] = {
-       1,
-       -1, 1, 681
+       3,
+       -1, 1, 455,
+       12, 0, 851,
+       97, 0, 852
 };
 static int parser_action_row674[] = {
-       1,
-       -1, 1, 682
+       4,
+       -1, 1, 457,
+       12, 0, 853,
+       96, 0, 53,
+       97, 0, 854
 };
 static int parser_action_row675[] = {
        1,
-       -1, 1, 684
+       -1, 1, 225
 };
 static int parser_action_row676[] = {
-       2,
-       -1, 1, 716,
-       52, 0, 253
+       1,
+       -1, 1, 244
 };
 static int parser_action_row677[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row678[] = {
-       3,
-       -1, 1, 698,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 394
 };
 static int parser_action_row679[] = {
-       2,
-       -1, 3, 678,
-       90, 0, 820
+       1,
+       -1, 1, 395
 };
 static int parser_action_row680[] = {
-       2,
-       -1, 1, 437,
-       89, 0, 821
+       1,
+       -1, 1, 208
 };
 static int parser_action_row681[] = {
-       3,
-       -1, 1, 439,
-       88, 0, 48,
-       89, 0, 822
+       1,
+       -1, 1, 227
 };
 static int parser_action_row682[] = {
-       1,
-       -1, 1, 709
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       53, 0, 857,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row683[] = {
        1,
-       -1, 1, 158
+       -1, 1, 220
 };
 static int parser_action_row684[] = {
-       31,
-       -1, 1, 440,
-       9, 0, 824,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 239
 };
 static int parser_action_row685[] = {
-       1,
-       -1, 1, 148
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row686[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row687[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 224
 };
 static int parser_action_row688[] = {
-       34,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 827,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       24, 0, 831,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 243
 };
 static int parser_action_row689[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 143,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row690[] = {
-       4,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 512
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row691[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 198
 };
 static int parser_action_row692[] = {
-       2,
-       -1, 3, 691,
-       89, 0, 864
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row693[] = {
-       2,
-       -1, 3, 692,
-       23, 0, 865
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row694[] = {
-       1,
-       -1, 1, 306
+       13,
+       -1, 1, 344,
+       59, 0, 865,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row695[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 715,
-       46, 0, 620,
-       88, 0, 48,
-       89, 0, 716
+       1,
+       -1, 1, 189
 };
 static int parser_action_row696[] = {
        1,
-       -1, 1, 276
+       -1, 1, 140
 };
 static int parser_action_row697[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 156,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 438
 };
 static int parser_action_row698[] = {
-       1,
-       -1, 1, 275
+       2,
+       -1, 3, 697,
+       53, 0, 867
 };
 static int parser_action_row699[] = {
-       1,
-       -1, 1, 278
+       2,
+       -1, 3, 698,
+       23, 0, 868
 };
 static int parser_action_row700[] = {
        3,
-       -1, 1, 286,
-       71, 0, 332,
-       72, 0, 333
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row701[] = {
-       3,
-       -1, 1, 289,
-       71, 0, 332,
-       72, 0, 333
+       1,
+       -1, 1, 740
 };
 static int parser_action_row702[] = {
-       1,
-       -1, 1, 291
+       2,
+       -1, 3, 701,
+       73, 0, 699
 };
 static int parser_action_row703[] = {
-       4,
-       -1, 1, 293,
-       73, 0, 341,
-       75, 0, 342,
-       76, 0, 343
+       5,
+       -1, 1, 458,
+       12, 0, 730,
+       46, 0, 731,
+       96, 0, 53,
+       97, 0, 732
 };
 static int parser_action_row704[] = {
-       4,
-       -1, 1, 294,
-       73, 0, 341,
-       75, 0, 342,
-       76, 0, 343
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row705[] = {
-       3,
-       -1, 1, 282,
-       71, 0, 332,
-       72, 0, 333
+       1,
+       -1, 1, 367
 };
 static int parser_action_row706[] = {
-       3,
-       -1, 1, 283,
-       71, 0, 332,
-       72, 0, 333
+       2,
+       -1, 1, 444,
+       56, 0, 872
 };
 static int parser_action_row707[] = {
-       3,
-       -1, 1, 284,
-       71, 0, 332,
-       72, 0, 333
+       9,
+       -1, 1, 437,
+       0, 1, 439,
+       1, 1, 439,
+       9, 1, 439,
+       24, 1, 439,
+       53, 1, 439,
+       56, 1, 439,
+       95, 1, 439,
+       110, 1, 439
 };
 static int parser_action_row708[] = {
-       3,
-       -1, 1, 285,
-       71, 0, 332,
-       72, 0, 333
+       1,
+       -1, 1, 702
 };
 static int parser_action_row709[] = {
-       3,
-       -1, 1, 287,
-       71, 0, 332,
-       72, 0, 333
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row710[] = {
-       3,
-       -1, 1, 288,
-       71, 0, 332,
-       72, 0, 333
+       1,
+       -1, 1, 701
 };
 static int parser_action_row711[] = {
-       3,
-       -1, 1, 290,
-       71, 0, 332,
-       72, 0, 333
+       1,
+       -1, 1, 704
 };
 static int parser_action_row712[] = {
        1,
-       -1, 1, 296
+       -1, 1, 715
 };
 static int parser_action_row713[] = {
-       1,
-       -1, 1, 297
+       2,
+       -1, 1, 717,
+       81, 0, 315
 };
 static int parser_action_row714[] = {
-       1,
-       -1, 1, 298
+       2,
+       -1, 1, 708,
+       80, 0, 307
 };
 static int parser_action_row715[] = {
-       1,
-       -1, 1, 300
+       2,
+       -1, 1, 709,
+       80, 0, 307
 };
 static int parser_action_row716[] = {
        2,
-       -1, 1, 332,
-       52, 0, 253
+       -1, 1, 710,
+       80, 0, 307
 };
 static int parser_action_row717[] = {
-       3,
-       -1, 1, 314,
-       52, 0, 253,
-       58, 0, 196
+       2,
+       -1, 1, 711,
+       80, 0, 307
 };
 static int parser_action_row718[] = {
        2,
-       -1, 3, 717,
-       90, 0, 869
+       -1, 1, 712,
+       80, 0, 307
 };
 static int parser_action_row719[] = {
        2,
-       -1, 1, 437,
-       89, 0, 870
+       -1, 1, 713,
+       80, 0, 307
 };
 static int parser_action_row720[] = {
-       3,
-       -1, 1, 439,
-       88, 0, 48,
-       89, 0, 871
+       2,
+       -1, 1, 714,
+       80, 0, 307
 };
 static int parser_action_row721[] = {
-       1,
-       -1, 1, 325
+       2,
+       -1, 1, 719,
+       82, 0, 316
 };
 static int parser_action_row722[] = {
-       1,
-       -1, 1, 268
+       3,
+       -1, 1, 721,
+       88, 0, 317,
+       91, 0, 318
 };
 static int parser_action_row723[] = {
-       1,
-       -1, 1, 151
+       3,
+       -1, 1, 723,
+       74, 0, 319,
+       75, 0, 320
 };
 static int parser_action_row724[] = {
-       1,
-       -1, 1, 150
+       3,
+       -1, 1, 724,
+       74, 0, 319,
+       75, 0, 320
 };
 static int parser_action_row725[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 726,
+       76, 0, 321,
+       78, 0, 322,
+       79, 0, 323
 };
 static int parser_action_row726[] = {
-       1,
-       -1, 1, 581
+       4,
+       -1, 1, 727,
+       76, 0, 321,
+       78, 0, 322,
+       79, 0, 323
 };
 static int parser_action_row727[] = {
-       3,
-       -1, 3, 726,
-       47, 0, 365,
-       88, 0, 366
+       1,
+       -1, 1, 729
 };
 static int parser_action_row728[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 730
 };
 static int parser_action_row729[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       1,
+       -1, 1, 731
 };
 static int parser_action_row730[] = {
        1,
-       -1, 1, 742
+       -1, 1, 733
 };
 static int parser_action_row731[] = {
-       3,
-       -1, 3, 730,
-       88, 0, 48,
-       89, 0, 878
+       2,
+       -1, 1, 766,
+       52, 0, 277
 };
 static int parser_action_row732[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
-};
-static int parser_action_row733[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row733[] = {
+       3,
+       -1, 1, 748,
+       52, 0, 277,
+       58, 0, 215
+};
 static int parser_action_row734[] = {
        2,
-       -1, 1, 388,
-       56, 0, 883
+       -1, 3, 733,
+       98, 0, 879
 };
 static int parser_action_row735[] = {
-       1,
-       -1, 1, 417
+       2,
+       -1, 1, 455,
+       97, 0, 880
 };
 static int parser_action_row736[] = {
-       1,
-       -1, 1, 416
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 881
 };
 static int parser_action_row737[] = {
        1,
-       -1, 1, 415
+       -1, 1, 759
 };
 static int parser_action_row738[] = {
-       3,
-       -1, 1, 384,
-       52, 0, 886,
-       87, 0, 185
+       1,
+       -1, 1, 164
 };
 static int parser_action_row739[] = {
-       3,
+       31,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       9, 0, 883,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row740[] = {
-       2,
-       -1, 3, 739,
-       59, 0, 889
+       1,
+       -1, 1, 154
 };
 static int parser_action_row741[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 143,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row742[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row743[] = {
-       1,
-       -1, 1, 141
+       35,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 886,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       24, 0, 890,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row744[] = {
-       3,
-       -1, 3, 743,
-       47, 0, 365,
-       88, 0, 366
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row745[] = {
-       1,
-       -1, 1, 194
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 554
 };
 static int parser_action_row746[] = {
-       2,
-       -1, 3, 745,
-       57, 0, 894
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row747[] = {
-       1,
-       -1, 1, 487
+       2,
+       -1, 3, 746,
+       97, 0, 923
 };
 static int parser_action_row748[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 715,
-       46, 0, 620,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       88, 0, 48,
-       89, 0, 895
+       2,
+       -1, 3, 747,
+       23, 0, 924
 };
 static int parser_action_row749[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 325
 };
 static int parser_action_row750[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       5,
+       -1, 1, 458,
+       12, 0, 773,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 774
 };
 static int parser_action_row751[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 287
 };
 static int parser_action_row752[] = {
-       1,
-       -1, 1, 1008
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row753[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 286
 };
 static int parser_action_row754[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 289
 };
 static int parser_action_row755[] = {
-       11,
-       -1, 1, 326,
-       52, 0, 253,
-       59, 0, 902,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 300
 };
 static int parser_action_row756[] = {
-       1,
-       -1, 1, 490
+       2,
+       -1, 1, 302,
+       81, 0, 366
 };
 static int parser_action_row757[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 293,
+       80, 0, 358
 };
 static int parser_action_row758[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 294,
+       80, 0, 358
 };
 static int parser_action_row759[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 295,
+       80, 0, 358
 };
 static int parser_action_row760[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 296,
+       80, 0, 358
 };
 static int parser_action_row761[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 411,
-       27, 0, 412,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 297,
+       80, 0, 358
 };
 static int parser_action_row762[] = {
-       1,
-       -1, 1, 1010
+       2,
+       -1, 1, 298,
+       80, 0, 358
 };
 static int parser_action_row763[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 299,
+       80, 0, 358
 };
 static int parser_action_row764[] = {
        2,
-       -1, 1, 433,
-       58, 0, 196
+       -1, 1, 304,
+       82, 0, 367
 };
 static int parser_action_row765[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 910
+       3,
+       -1, 1, 306,
+       88, 0, 368,
+       91, 0, 369
 };
 static int parser_action_row766[] = {
-       2,
-       -1, 3, 765,
-       89, 0, 912
+       3,
+       -1, 1, 308,
+       74, 0, 370,
+       75, 0, 371
 };
 static int parser_action_row767[] = {
        3,
-       -1, 3, 766,
-       0, 0, 83,
-       1, 0, 84
+       -1, 1, 309,
+       74, 0, 370,
+       75, 0, 371
 };
 static int parser_action_row768[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 910
+       4,
+       -1, 1, 311,
+       76, 0, 372,
+       78, 0, 373,
+       79, 0, 374
 };
 static int parser_action_row769[] = {
-       2,
-       -1, 1, 98,
-       59, 0, 915
+       4,
+       -1, 1, 312,
+       76, 0, 372,
+       78, 0, 373,
+       79, 0, 374
 };
 static int parser_action_row770[] = {
        1,
-       -1, 1, 100
+       -1, 1, 314
 };
 static int parser_action_row771[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 315
 };
 static int parser_action_row772[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 316
 };
 static int parser_action_row773[] = {
-       4,
-       -1, 1, 118,
-       4, 0, 918,
-       14, 0, 919,
-       15, 0, 920
+       1,
+       -1, 1, 318
 };
 static int parser_action_row774[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 351,
+       52, 0, 277
 };
 static int parser_action_row775[] = {
-       1,
-       -1, 1, 106
+       3,
+       -1, 1, 333,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row776[] = {
        2,
-       -1, 1, 102,
-       59, 0, 769
+       -1, 3, 775,
+       98, 0, 928
 };
 static int parser_action_row777[] = {
-       1,
-       -1, 1, 446
+       2,
+       -1, 1, 455,
+       97, 0, 929
 };
 static int parser_action_row778[] = {
-       1,
-       -1, 1, 448
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 930
 };
 static int parser_action_row779[] = {
-       18,
-       -1, 3, 778,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       89, 0, 775
+       1,
+       -1, 1, 344
 };
 static int parser_action_row780[] = {
-       2,
-       -1, 1, 441,
-       58, 0, 195
+       1,
+       -1, 1, 279
 };
 static int parser_action_row781[] = {
-       2,
-       -1, 3, 780,
-       58, 0, 196
+       1,
+       -1, 1, 157
 };
 static int parser_action_row782[] = {
-       2,
-       -1, 1, 37,
-       54, 0, 926
+       1,
+       -1, 1, 156
 };
 static int parser_action_row783[] = {
-       2,
-       -1, 3, 782,
-       88, 0, 928
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row784[] = {
-       3,
-       -1, 3, 783,
-       88, 0, 929,
-       89, 0, 780
+       1,
+       -1, 1, 623
 };
 static int parser_action_row785[] = {
-       1,
-       -1, 1, 424
+       3,
+       -1, 3, 784,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row786[] = {
-       1,
-       -1, 1, 331
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row787[] = {
-       1,
-       -1, 1, 186
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row788[] = {
-       3,
-       -1, 3, 787,
-       31, 0, 931,
-       52, 0, 932
+       1,
+       -1, 1, 794
 };
 static int parser_action_row789[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 788,
+       96, 0, 53,
+       97, 0, 937
 };
 static int parser_action_row790[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row791[] = {
-       10,
-       -1, 1, 313,
-       59, 0, 935,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row792[] = {
-       1,
-       -1, 1, 177
+       2,
+       -1, 1, 408,
+       56, 0, 942
 };
 static int parser_action_row793[] = {
-       10,
-       -1, 1, 311,
-       59, 0, 937,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 436
 };
 static int parser_action_row794[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 435
 };
 static int parser_action_row795[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 316,
-       59, 0, 940,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 316,
-       70, 1, 316,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 434
 };
 static int parser_action_row796[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 405,
+       52, 0, 945,
+       94, 0, 204
 };
 static int parser_action_row797[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 320,
-       58, 0, 196,
-       59, 0, 945,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 320,
-       70, 1, 320,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row798[] = {
-       3,
-       -1, 1, 438,
-       12, 0, 949,
-       89, 0, 950
+       2,
+       -1, 3, 797,
+       59, 0, 948
 };
 static int parser_action_row799[] = {
-       1,
-       -1, 1, 377
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row800[] = {
-       1,
-       -1, 1, 422
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row801[] = {
-       2,
-       -1, 3, 800,
-       53, 0, 951
+       1,
+       -1, 1, 147
 };
 static int parser_action_row802[] = {
-       1,
-       -1, 1, 213
+       3,
+       -1, 3, 801,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row803[] = {
        1,
-       -1, 1, 232
+       -1, 1, 200
 };
 static int parser_action_row804[] = {
-       1,
-       -1, 1, 217
+       2,
+       -1, 3, 803,
+       57, 0, 953
 };
 static int parser_action_row805[] = {
        1,
-       -1, 1, 236
+       -1, 1, 519
 };
 static int parser_action_row806[] = {
-       1,
-       -1, 1, 216
+       25,
+       -1, 1, 458,
+       12, 0, 773,
+       46, 0, 669,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 954
 };
 static int parser_action_row807[] = {
-       1,
-       -1, 1, 235
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row808[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row809[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row810[] = {
        1,
-       -1, 1, 418
+       -1, 1, 1075
 };
 static int parser_action_row811[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row812[] = {
-       3,
-       -1, 3, 811,
-       88, 0, 48,
-       89, 0, 955
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row813[] = {
-       2,
-       -1, 3, 812,
-       90, 0, 958
+       14,
+       -1, 1, 345,
+       52, 0, 277,
+       59, 0, 961,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row814[] = {
+       1,
+       -1, 1, 522
+};
+static int parser_action_row815[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row815[] = {
-       1,
-       -1, 1, 1019
-};
 static int parser_action_row816[] = {
-       2,
-       -1, 1, 427,
-       56, 0, 813
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row817[] = {
-       1,
-       -1, 1, 661
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row818[] = {
-       1,
-       -1, 1, 715
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row819[] = {
-       3,
-       -1, 3, 818,
-       31, 0, 961,
-       52, 0, 962
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row820[] = {
        1,
-       -1, 1, 697
+       -1, 1, 1077
 };
 static int parser_action_row821[] = {
-       1,
-       -1, 1, 695
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row822[] = {
        2,
-       -1, 1, 700,
-       52, 0, 253
+       -1, 1, 451,
+       58, 0, 215
 };
 static int parser_action_row823[] = {
-       3,
-       -1, 1, 704,
-       52, 0, 253,
-       58, 0, 196
+       2,
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row824[] = {
        2,
-       -1, 1, 438,
-       89, 0, 965
+       -1, 3, 823,
+       97, 0, 971
 };
 static int parser_action_row825[] = {
-       1,
-       -1, 1, 159
+       4,
+       -1, 3, 824,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row826[] = {
-       1,
-       -1, 1, 199
+       2,
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row827[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 104,
+       59, 0, 974
 };
 static int parser_action_row828[] = {
        1,
-       -1, 1, 255
+       -1, 1, 106
 };
 static int parser_action_row829[] = {
-       27,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 334,
-       68, 1, 334,
-       70, 1, 334,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
-};
-static int parser_action_row830[] = {
-       33,
-       -1, 1, 440,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 968,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1, 0, 2
 };
-static int parser_action_row831[] = {
+static int parser_action_row830[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row832[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+static int parser_action_row831[] = {
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 979
 };
-static int parser_action_row833[] = {
+static int parser_action_row832[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row833[] = {
+       1,
+       -1, 1, 112
+};
 static int parser_action_row834[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 968,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 108,
+       59, 0, 827
 };
 static int parser_action_row835[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 464
 };
 static int parser_action_row836[] = {
-       26,
-       -1, 1, 163,
-       12, 0, 156,
-       22, 0, 157,
-       24, 1, 838,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 466
 };
 static int parser_action_row837[] = {
-       3,
-       -1, 1, 168,
-       24, 1, 843,
-       49, 0, 178
+       22,
+       -1, 3, 836,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       97, 0, 833
 };
 static int parser_action_row838[] = {
-       3,
-       -1, 1, 165,
-       24, 1, 840,
-       49, 0, 178
+       2,
+       -1, 1, 459,
+       58, 0, 214
 };
 static int parser_action_row839[] = {
        2,
-       -1, 1, 167,
-       24, 1, 842
+       -1, 3, 838,
+       58, 0, 215
 };
 static int parser_action_row840[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 181,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 0, 84,
+       54, 0, 985,
+       95, 0, 3,
+       109, 0, 85
 };
 static int parser_action_row841[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 840,
+       96, 0, 995
 };
 static int parser_action_row842[] = {
-       2,
+       3,
        -1, 3, 841,
-       11, 0, 985
+       96, 0, 996,
+       97, 0, 838
 };
 static int parser_action_row843[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 322,
-       58, 0, 196,
-       59, 0, 197,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 322,
-       70, 1, 322,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 443
 };
 static int parser_action_row844[] = {
        1,
-       -1, 1, 250
+       -1, 1, 350
 };
 static int parser_action_row845[] = {
-       2,
-       -1, 1, 161,
-       24, 1, 836
+       1,
+       -1, 1, 192
 };
 static int parser_action_row846[] = {
-       2,
-       -1, 1, 162,
-       24, 1, 837
+       3,
+       -1, 3, 845,
+       31, 0, 998,
+       52, 0, 999
 };
 static int parser_action_row847[] = {
-       1,
-       -1, 1, 252
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row848[] = {
-       4,
-       -1, 3, 847,
-       54, 0, 223,
-       68, 0, 224,
-       70, 0, 987
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row849[] = {
-       3,
-       -1, 3, 848,
-       41, 0, 988,
-       90, 0, 235
+       13,
+       -1, 1, 332,
+       59, 0, 1002,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row850[] = {
-       3,
-       -1, 1, 437,
-       12, 0, 989,
-       89, 0, 990
+       1,
+       -1, 1, 183
 };
 static int parser_action_row851[] = {
-       32,
-       -1, 1, 440,
-       9, 0, 827,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       24, 0, 831,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
+       13,
+       -1, 1, 330,
+       59, 0, 1004,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
 static int parser_action_row852[] = {
-       2,
-       -1, 3, 851,
-       24, 0, 994
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row853[] = {
-       1,
-       -1, 1, 845
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 335,
+       59, 0, 1007,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 335,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row854[] = {
-       1,
-       -1, 1, 846
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row855[] = {
-       1,
-       -1, 1, 848
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 339,
+       58, 0, 215,
+       59, 0, 1012,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 339,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row856[] = {
-       1,
-       -1, 1, 847
+       3,
+       -1, 1, 456,
+       12, 0, 1016,
+       97, 0, 1017
 };
 static int parser_action_row857[] = {
        1,
-       -1, 1, 849
+       -1, 1, 398
 };
 static int parser_action_row858[] = {
        1,
-       -1, 1, 850
+       -1, 1, 441
 };
 static int parser_action_row859[] = {
-       1,
-       -1, 1, 851
+       2,
+       -1, 3, 858,
+       53, 0, 1018
 };
 static int parser_action_row860[] = {
-       4,
-       -1, 1, 439,
-       12, 0, 995,
-       88, 0, 48,
-       89, 0, 996
+       1,
+       -1, 1, 219
 };
 static int parser_action_row861[] = {
        1,
-       -1, 1, 259
+       -1, 1, 238
 };
 static int parser_action_row862[] = {
-       2,
-       -1, 3, 861,
-       49, 0, 178
+       1,
+       -1, 1, 223
 };
 static int parser_action_row863[] = {
-       2,
-       -1, 3, 862,
-       53, 0, 999
+       1,
+       -1, 1, 242
 };
 static int parser_action_row864[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 222
 };
 static int parser_action_row865[] = {
        1,
-       -1, 1, 432
+       -1, 1, 241
 };
 static int parser_action_row866[] = {
-       3,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row867[] = {
-       2,
-       -1, 3, 866,
-       90, 0, 1002
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row868[] = {
        1,
-       -1, 1, 277
+       -1, 1, 437
 };
 static int parser_action_row869[] = {
-       1,
-       -1, 1, 313
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row870[] = {
-       1,
-       -1, 1, 311
+       3,
+       -1, 3, 869,
+       96, 0, 53,
+       97, 0, 1022
 };
 static int parser_action_row871[] = {
        2,
-       -1, 1, 316,
-       52, 0, 253
+       -1, 3, 870,
+       98, 0, 1025
 };
 static int parser_action_row872[] = {
-       3,
-       -1, 1, 320,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 368
 };
 static int parser_action_row873[] = {
-       2,
-       -1, 1, 438,
-       89, 0, 1005
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row874[] = {
-       3,
-       -1, 3, 873,
-       47, 0, 365,
-       88, 0, 366
+       1,
+       -1, 1, 1084
 };
 static int parser_action_row875[] = {
        2,
-       -1, 1, 144,
-       56, 0, 1007
+       -1, 1, 445,
+       56, 0, 872
 };
 static int parser_action_row876[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 703
 };
 static int parser_action_row877[] = {
-       2,
-       -1, 1, 28,
-       13, 0, 26
+       1,
+       -1, 1, 765
 };
 static int parser_action_row878[] = {
-       4,
+       3,
        -1, 3, 877,
-       6, 0, 734,
-       17, 0, 735,
-       89, 0, 736
+       31, 0, 1028,
+       52, 0, 1029
 };
 static int parser_action_row879[] = {
-       3,
-       -1, 1, 337,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 747
 };
 static int parser_action_row880[] = {
-       2,
-       -1, 3, 879,
-       89, 0, 1014
+       1,
+       -1, 1, 745
 };
 static int parser_action_row881[] = {
-       3,
-       -1, 3, 880,
-       88, 0, 48,
-       89, 0, 1015
+       2,
+       -1, 1, 750,
+       52, 0, 277
 };
 static int parser_action_row882[] = {
-       4,
-       -1, 3, 881,
-       6, 0, 734,
-       17, 0, 735,
-       89, 0, 736
+       3,
+       -1, 1, 754,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row883[] = {
        2,
-       -1, 3, 882,
-       53, 0, 1018
+       -1, 1, 456,
+       97, 0, 1032
 };
 static int parser_action_row884[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 165
 };
 static int parser_action_row885[] = {
        1,
-       -1, 1, 1013
+       -1, 1, 205
 };
 static int parser_action_row886[] = {
-       2,
-       -1, 1, 389,
-       56, 0, 883
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row887[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 266
 };
 static int parser_action_row888[] = {
-       1,
-       -1, 1, 385
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 353,
+       73, 1, 353,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row889[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row890[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row891[] = {
-       1,
-       -1, 1, 263
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row892[] = {
-       2,
-       -1, 3, 891,
-       49, 0, 178
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row893[] = {
-       3,
-       -1, 3, 892,
-       47, 0, 365,
-       88, 0, 366
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row894[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row895[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       27,
+       -1, 1, 169,
+       12, 0, 170,
+       22, 0, 171,
+       24, 1, 900,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row896[] = {
-       12,
-       -1, 1, 314,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 1028,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       3,
+       -1, 1, 174,
+       24, 1, 905,
+       49, 0, 197
 };
 static int parser_action_row897[] = {
-       18,
-       -1, 1, 437,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 1029
+       3,
+       -1, 1, 171,
+       24, 1, 902,
+       49, 0, 197
 };
 static int parser_action_row898[] = {
-       1,
-       -1, 1, 412
+       2,
+       -1, 1, 173,
+       24, 1, 904
 };
 static int parser_action_row899[] = {
-       19,
-       -1, 1, 439,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       88, 0, 48,
-       89, 0, 1030
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 200,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row900[] = {
-       1,
-       -1, 1, 363
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row901[] = {
-       1,
-       -1, 1, 365
+       2,
+       -1, 3, 900,
+       11, 0, 1052
 };
 static int parser_action_row902[] = {
-       1,
-       -1, 1, 362
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 341,
+       58, 0, 215,
+       59, 0, 216,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 341,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row903[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 259
 };
 static int parser_action_row904[] = {
        2,
-       -1, 3, 903,
-       23, 0, 1032
+       -1, 1, 167,
+       24, 1, 898
 };
 static int parser_action_row905[] = {
        2,
-       -1, 3, 904,
-       28, 0, 1033
+       -1, 1, 168,
+       24, 1, 899
 };
 static int parser_action_row906[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 1034,
-       22, 0, 1035,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 264
 };
 static int parser_action_row907[] = {
-       1,
-       -1, 1, 361
+       3,
+       -1, 3, 906,
+       54, 0, 244,
+       73, 0, 1054
 };
 static int parser_action_row908[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 907,
+       41, 0, 1055,
+       98, 0, 255
 };
 static int parser_action_row909[] = {
-       1,
-       -1, 1, 368
+       3,
+       -1, 1, 455,
+       12, 0, 1056,
+       97, 0, 1057
 };
 static int parser_action_row910[] = {
-       2,
-       -1, 3, 909,
-       89, 0, 1069
+       32,
+       -1, 1, 458,
+       9, 0, 886,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       24, 0, 1058,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row911[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       2,
+       -1, 3, 910,
+       24, 0, 1062
 };
 static int parser_action_row912[] = {
-       3,
-       -1, 3, 911,
-       0, 0, 83,
-       1, 0, 84
+       1,
+       -1, 1, 907
 };
 static int parser_action_row913[] = {
-       2,
-       -1, 1, 434,
-       58, 0, 196
+       1,
+       -1, 1, 908
 };
 static int parser_action_row914[] = {
        1,
-       -1, 1, 18
+       -1, 1, 910
 };
 static int parser_action_row915[] = {
-       3,
-       -1, 3, 914,
-       0, 0, 83,
-       1, 0, 84
+       1,
+       -1, 1, 909
 };
 static int parser_action_row916[] = {
        1,
-       -1, 1, 101
+       -1, 1, 911
 };
 static int parser_action_row917[] = {
-       2,
-       -1, 1, 109,
-       89, 0, 1076
+       1,
+       -1, 1, 912
 };
 static int parser_action_row918[] = {
-       3,
-       -1, 3, 917,
-       47, 0, 365,
-       88, 0, 366
+       1,
+       -1, 1, 913
 };
 static int parser_action_row919[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 457,
+       12, 0, 1063,
+       96, 0, 53,
+       97, 0, 1064
 };
 static int parser_action_row920[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       1,
+       -1, 1, 270
 };
 static int parser_action_row921[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 920,
+       49, 0, 197
 };
 static int parser_action_row922[] = {
-       3,
-       -1, 1, 118,
-       4, 0, 918,
-       15, 0, 1084
+       2,
+       -1, 3, 921,
+       53, 0, 1067
 };
 static int parser_action_row923[] = {
-       3,
-       -1, 3, 922,
-       28, 0, 33,
-       101, 0, 56
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row924[] = {
        1,
-       -1, 1, 465
+       -1, 1, 450
 };
 static int parser_action_row925[] = {
-       1,
-       -1, 1, 105
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row926[] = {
-       1,
-       -1, 1, 447
+       2,
+       -1, 3, 925,
+       98, 0, 1070
 };
 static int parser_action_row927[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 288
 };
 static int parser_action_row928[] = {
-       5,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       28, 0, 33,
-       101, 0, 56
+       1,
+       -1, 1, 332
 };
 static int parser_action_row929[] = {
        1,
-       -1, 1, 442
+       -1, 1, 330
 };
 static int parser_action_row930[] = {
        2,
-       -1, 1, 444,
-       58, 0, 195
+       -1, 1, 335,
+       52, 0, 277
 };
 static int parser_action_row931[] = {
-       2,
-       -1, 3, 930,
-       88, 0, 1096
+       3,
+       -1, 1, 339,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row932[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 456,
+       97, 0, 1073
 };
 static int parser_action_row933[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 932,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row934[] = {
-       1,
-       -1, 1, 204
+       2,
+       -1, 1, 150,
+       56, 0, 1075
 };
 static int parser_action_row935[] = {
-       1,
-       -1, 1, 223
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row936[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row937[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 3, 936,
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row938[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 356,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row939[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 938,
+       97, 0, 1082
 };
 static int parser_action_row940[] = {
-       1,
-       -1, 1, 188
+       3,
+       -1, 3, 939,
+       96, 0, 53,
+       97, 0, 1083
 };
 static int parser_action_row941[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 3, 940,
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row942[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 941,
+       53, 0, 1086
 };
 static int parser_action_row943[] = {
-       10,
-       -1, 1, 315,
-       59, 0, 1105,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row944[] = {
        1,
-       -1, 1, 178
+       -1, 1, 1080
 };
 static int parser_action_row945[] = {
-       1,
-       -1, 1, 190
+       2,
+       -1, 1, 409,
+       56, 0, 942
 };
 static int parser_action_row946[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row947[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 406
 };
 static int parser_action_row948[] = {
-       10,
-       -1, 1, 319,
-       59, 0, 1109,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row949[] = {
-       1,
-       -1, 1, 180
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row950[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 274
 };
 static int parser_action_row951[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 318,
-       59, 0, 1112,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 318,
-       70, 1, 318,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 3, 950,
+       49, 0, 197
 };
 static int parser_action_row952[] = {
-       1,
-       -1, 1, 420
+       3,
+       -1, 3, 951,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row953[] = {
-       1,
-       -1, 1, 215
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row954[] = {
-       1,
-       -1, 1, 234
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row955[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       15,
+       -1, 1, 333,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1096,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row956[] = {
-       3,
-       -1, 1, 721,
-       52, 0, 253,
-       58, 0, 196
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1097
 };
 static int parser_action_row957[] = {
-       2,
-       -1, 3, 956,
-       89, 0, 1118
+       1,
+       -1, 1, 431
 };
 static int parser_action_row958[] = {
-       3,
-       -1, 3, 957,
-       88, 0, 48,
-       89, 0, 1119
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1098
 };
 static int parser_action_row959[] = {
-       4,
-       -1, 1, 692,
-       54, 1, 695,
-       68, 1, 695,
-       70, 1, 695
+       1,
+       -1, 1, 384
 };
 static int parser_action_row960[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 386
 };
 static int parser_action_row961[] = {
        1,
-       -1, 1, 1020
+       -1, 1, 383
 };
 static int parser_action_row962[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row963[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 962,
+       23, 0, 1100
 };
 static int parser_action_row964[] = {
-       1,
-       -1, 1, 699
+       2,
+       -1, 3, 963,
+       28, 0, 1101
 };
 static int parser_action_row965[] = {
-       1,
-       -1, 1, 703
+       23,
+       -1, 1, 458,
+       12, 0, 1102,
+       22, 0, 1103,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row966[] = {
-       2,
-       -1, 1, 702,
-       52, 0, 253
+       1,
+       -1, 1, 382
 };
 static int parser_action_row967[] = {
-       1,
-       -1, 1, 200
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row968[] = {
-       2,
-       -1, 1, 187,
-       24, 1, 862
+       1,
+       -1, 1, 389
 };
 static int parser_action_row969[] = {
-       3,
-       -1, 1, 152,
-       24, 1, 834,
-       49, 1, 919
+       2,
+       -1, 3, 968,
+       97, 0, 1142
 };
 static int parser_action_row970[] = {
-       31,
-       -1, 1, 440,
-       9, 0, 1125,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row971[] = {
-       1,
-       -1, 1, 871
+       4,
+       -1, 3, 970,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row972[] = {
-       1,
-       -1, 1, 835
+       2,
+       -1, 1, 452,
+       58, 0, 215
 };
 static int parser_action_row973[] = {
-       2,
-       -1, 3, 972,
-       49, 0, 178
+       1,
+       -1, 1, 18
 };
 static int parser_action_row974[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 3, 973,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row975[] = {
        1,
-       -1, 1, 254
+       -1, 1, 107
 };
 static int parser_action_row976[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 115,
+       97, 0, 1148
 };
 static int parser_action_row977[] = {
-       1,
-       -1, 1, 874
+       3,
+       -1, 3, 976,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row978[] = {
-       2,
-       -1, 3, 977,
-       49, 0, 178
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row979[] = {
-       3,
-       -1, 3, 978,
-       52, 0, 312,
-       89, 0, 313
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row980[] = {
-       2,
-       -1, 1, 164,
-       24, 1, 839
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row981[] = {
-       2,
-       -1, 1, 169,
-       24, 1, 844
+       3,
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1156
 };
 static int parser_action_row982[] = {
-       2,
-       -1, 1, 166,
-       24, 1, 841
+       3,
+       -1, 3, 981,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row983[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 493
 };
 static int parser_action_row984[] = {
-       2,
-       -1, 1, 269,
-       24, 0, 1133
+       1,
+       -1, 1, 111
 };
 static int parser_action_row985[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 362,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 465
 };
 static int parser_action_row986[] = {
        3,
-       -1, 3, 985,
-       47, 0, 365,
-       88, 0, 366
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row987[] = {
        2,
-       -1, 1, 181,
-       24, 1, 856
+       -1, 1, 75,
+       9, 1, 45
 };
 static int parser_action_row988[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 987,
+       9, 0, 1160
 };
 static int parser_action_row989[] = {
-       27,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 330,
-       68, 1, 330,
-       70, 1, 330,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 1062
 };
 static int parser_action_row990[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       4,
+       -1, 3, 989,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row991[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 324,
-       59, 0, 453,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 324,
-       70, 1, 324,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row992[] = {
-       3,
-       -1, 3, 991,
-       9, 0, 827,
-       24, 0, 831
+       1,
+       -1, 1, 74
 };
 static int parser_action_row993[] = {
-       3,
-       -1, 3, 992,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 486
 };
 static int parser_action_row994[] = {
-       1,
-       -1, 1, 253
+       5,
+       -1, 1, 30,
+       6, 0, 1163,
+       9, 1, 46,
+       13, 0, 32,
+       97, 0, 1164
 };
 static int parser_action_row995[] = {
-       33,
-       -1, 1, 440,
+       5,
+       -1, 1, 485,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       9, 1, 487,
+       95, 0, 3
 };
 static int parser_action_row996[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 460
 };
 static int parser_action_row997[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 328,
-       58, 0, 196,
-       59, 0, 458,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 328,
-       70, 1, 328,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 1, 462,
+       58, 0, 214
 };
 static int parser_action_row998[] = {
-       3,
-       -1, 1, 438,
-       12, 0, 1145,
-       89, 0, 1146
+       2,
+       -1, 3, 997,
+       96, 0, 1171
 };
 static int parser_action_row999[] = {
-       1,
-       -1, 1, 258
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1000[] = {
-       1,
-       -1, 1, 429
-};
-static int parser_action_row1001[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1001[] = {
+       1,
+       -1, 1, 210
+};
 static int parser_action_row1002[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 229
 };
 static int parser_action_row1003[] = {
-       4,
-       -1, 1, 308,
-       54, 1, 311,
-       68, 1, 311,
-       70, 1, 311
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1004[] = {
-       1,
-       -1, 1, 315
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1005[] = {
-       1,
-       -1, 1, 319
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1006[] = {
-       2,
-       -1, 1, 318,
-       52, 0, 253
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1007[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 194
 };
 static int parser_action_row1008[] = {
-       3,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1009[] = {
-       1,
-       -1, 1, 1003
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1010[] = {
-       2,
-       -1, 1, 145,
-       56, 0, 1007
+       13,
+       -1, 1, 334,
+       59, 0, 1180,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1011[] = {
-       2,
-       -1, 3, 1010,
-       55, 0, 1153
+       1,
+       -1, 1, 184
 };
 static int parser_action_row1012[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 196
 };
 static int parser_action_row1013[] = {
-       2,
-       -1, 1, 745,
-       87, 0, 550
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1014[] = {
-       1,
-       -1, 1, 336
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1015[] = {
-       2,
-       -1, 1, 339,
-       52, 0, 253
+       13,
+       -1, 1, 338,
+       59, 0, 1184,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1016[] = {
-       3,
-       -1, 1, 343,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 186
 };
 static int parser_action_row1017[] = {
-       2,
-       -1, 3, 1016,
-       89, 0, 1158
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1018[] = {
-       13,
-       -1, 1, 384,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       52, 0, 1159,
-       87, 0, 185,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 337,
+       59, 0, 1187,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 337,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1019[] = {
        1,
-       -1, 1, 382
+       -1, 1, 439
 };
 static int parser_action_row1020[] = {
-       2,
-       -1, 1, 28,
-       13, 0, 26
+       1,
+       -1, 1, 221
 };
 static int parser_action_row1021[] = {
        1,
-       -1, 1, 1014
+       -1, 1, 240
 };
 static int parser_action_row1022[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1023[] = {
-       1,
-       -1, 1, 264
+       3,
+       -1, 1, 771,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1024[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1023,
+       97, 0, 1193
 };
 static int parser_action_row1025[] = {
-       1,
-       -1, 1, 262
+       3,
+       -1, 3, 1024,
+       96, 0, 53,
+       97, 0, 1194
 };
 static int parser_action_row1026[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 742,
+       54, 1, 745,
+       73, 1, 745
 };
 static int parser_action_row1027[] = {
-       2,
-       -1, 3, 1026,
-       55, 0, 1168
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1028[] = {
        1,
-       -1, 1, 938
+       -1, 1, 1085
 };
 static int parser_action_row1029[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1030[] = {
-       11,
-       -1, 1, 316,
-       52, 0, 253,
-       59, 0, 1169,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1031[] = {
-       12,
-       -1, 1, 320,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 1170,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 749
 };
 static int parser_action_row1032[] = {
-       18,
-       -1, 1, 438,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 1171
+       1,
+       -1, 1, 753
 };
 static int parser_action_row1033[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 752,
+       52, 0, 277
 };
 static int parser_action_row1034[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 206
 };
 static int parser_action_row1035[] = {
        2,
-       -1, 1, 556,
-       52, 0, 253
+       -1, 1, 193,
+       24, 1, 924
 };
 static int parser_action_row1036[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 158,
+       24, 1, 896,
+       49, 1, 981
 };
 static int parser_action_row1037[] = {
-       3,
+       31,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       9, 0, 1200,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1038[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 933
 };
 static int parser_action_row1039[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 897
 };
 static int parser_action_row1040[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 3, 1039,
+       49, 0, 197
 };
 static int parser_action_row1041[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1042[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 261
 };
 static int parser_action_row1043[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1044[] = {
-       16,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1183,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       52, 0, 46,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 936
 };
 static int parser_action_row1045[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 3, 1044,
+       49, 0, 197
 };
 static int parser_action_row1046[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       3,
+       -1, 3, 1045,
+       52, 0, 340,
+       97, 0, 341
 };
 static int parser_action_row1047[] = {
-       3,
-       -1, 1, 538,
-       52, 0, 253,
-       58, 0, 196
+       2,
+       -1, 1, 170,
+       24, 1, 901
 };
 static int parser_action_row1048[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 175,
+       24, 1, 906
 };
 static int parser_action_row1049[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 172,
+       24, 1, 903
 };
 static int parser_action_row1050[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1051[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 280,
+       24, 0, 1208
 };
 static int parser_action_row1052[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 393,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1053[] = {
-       1,
-       -1, 1, 579
+       3,
+       -1, 3, 1052,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1054[] = {
-       1,
-       -1, 1, 578
+       2,
+       -1, 1, 187,
+       24, 1, 918
 };
 static int parser_action_row1055[] = {
        3,
-       -1, 3, 1054,
-       41, 0, 1194,
-       90, 0, 1195
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1056[] = {
-       2,
-       -1, 1, 437,
-       89, 0, 1196
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 349,
+       73, 1, 349,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1057[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1058[] = {
-       4,
-       -1, 1, 494,
-       29, 0, 1198,
-       30, 0, 1199,
-       32, 0, 1200
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 343,
+       59, 0, 488,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 343,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1059[] = {
-       1,
-       -1, 1, 496
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1060[] = {
        3,
-       -1, 1, 501,
-       81, 0, 1201,
-       84, 0, 1202
+       -1, 3, 1059,
+       9, 0, 886,
+       24, 0, 1216
 };
 static int parser_action_row1061[] = {
-       11,
-       -1, 1, 503,
-       39, 0, 1203,
-       71, 0, 1204,
-       72, 0, 1205,
-       77, 0, 1206,
-       78, 0, 1207,
-       79, 0, 1208,
-       80, 0, 1209,
-       82, 0, 1210,
-       83, 0, 1211,
-       85, 0, 1212
+       4,
+       -1, 3, 1060,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1062[] = {
-       4,
-       -1, 1, 514,
-       73, 0, 1213,
-       75, 0, 1214,
-       76, 0, 1215
+       1,
+       -1, 1, 265
 };
 static int parser_action_row1063[] = {
-       1,
-       -1, 1, 517
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1064[] = {
-       2,
-       -1, 1, 521,
-       74, 0, 1216
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1065[] = {
-       1,
-       -1, 1, 523
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 347,
+       58, 0, 215,
+       59, 0, 493,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 347,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1066[] = {
        3,
-       -1, 1, 527,
-       68, 0, 1217,
-       70, 0, 1218
+       -1, 1, 456,
+       12, 0, 1222,
+       97, 0, 1223
 };
 static int parser_action_row1067[] = {
        1,
-       -1, 1, 532
+       -1, 1, 269
 };
 static int parser_action_row1068[] = {
-       3,
-       -1, 1, 439,
-       88, 0, 48,
-       89, 0, 1219
+       1,
+       -1, 1, 447
 };
 static int parser_action_row1069[] = {
-       1,
-       -1, 1, 369
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1070[] = {
-       2,
-       -1, 1, 435,
-       58, 0, 196
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1071[] = {
-       2,
-       -1, 3, 1070,
-       89, 0, 1221
+       3,
+       -1, 1, 327,
+       54, 1, 330,
+       73, 1, 330
 };
 static int parser_action_row1072[] = {
        1,
-       -1, 1, 74
+       -1, 1, 334
 };
 static int parser_action_row1073[] = {
        1,
-       -1, 1, 387
+       -1, 1, 338
 };
 static int parser_action_row1074[] = {
+       2,
+       -1, 1, 337,
+       52, 0, 277
+};
+static int parser_action_row1075[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1075[] = {
-       1,
-       -1, 1, 16
-};
 static int parser_action_row1076[] = {
-       1,
-       -1, 1, 17
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1077[] = {
-       3,
-       -1, 1, 384,
-       57, 0, 771,
-       87, 0, 185
+       1,
+       -1, 1, 1070
 };
 static int parser_action_row1078[] = {
        2,
-       -1, 3, 1077,
-       53, 0, 1229
+       -1, 1, 151,
+       56, 0, 1075
 };
 static int parser_action_row1079[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1230
+       2,
+       -1, 3, 1078,
+       55, 0, 1230
 };
 static int parser_action_row1080[] = {
-       1,
-       -1, 1, 147
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1081[] = {
-       21,
-       -1, 3, 1080,
-       41, 0, 1234,
-       47, 0, 365,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 389,
-       89, 0, 611
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1082[] = {
-       3,
-       -1, 1, 77,
-       0, 1, 468,
-       1, 1, 468
+       1,
+       -1, 1, 355
 };
 static int parser_action_row1083[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 358,
+       52, 0, 277
 };
 static int parser_action_row1084[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       3,
+       -1, 1, 362,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1085[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1084,
+       97, 0, 1235
 };
 static int parser_action_row1086[] = {
-       3,
-       -1, 3, 1085,
-       28, 0, 33,
-       101, 0, 56
+       13,
+       -1, 1, 405,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       52, 0, 1236,
+       94, 0, 204,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1087[] = {
        1,
-       -1, 1, 466
+       -1, 1, 403
 };
 static int parser_action_row1088[] = {
        2,
-       -1, 3, 1087,
-       88, 0, 1245
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row1089[] = {
-       2,
-       -1, 1, 73,
-       9, 1, 43
+       1,
+       -1, 1, 1081
 };
 static int parser_action_row1090[] = {
-       2,
-       -1, 3, 1089,
-       9, 0, 1247
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1091[] = {
        1,
-       -1, 1, 997
+       -1, 1, 275
 };
 static int parser_action_row1092[] = {
-       3,
-       -1, 3, 1091,
-       0, 0, 83,
-       1, 0, 84
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1093[] = {
+       1,
+       -1, 1, 273
+};
+static int parser_action_row1094[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1094[] = {
-       1,
-       -1, 1, 72
-};
 static int parser_action_row1095[] = {
-       5,
-       -1, 1, 28,
-       6, 0, 1250,
-       9, 1, 44,
-       13, 0, 26,
-       89, 0, 1251
+       2,
+       -1, 3, 1094,
+       55, 0, 1245
 };
 static int parser_action_row1096[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 1000
 };
 static int parser_action_row1097[] = {
-       1,
-       -1, 1, 443
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1098[] = {
-       2,
-       -1, 3, 1097,
-       45, 0, 1257
+       14,
+       -1, 1, 335,
+       52, 0, 277,
+       59, 0, 1246,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1099[] = {
-       4,
-       -1, 3, 1098,
-       31, 0, 1258,
-       47, 0, 365,
-       88, 0, 366
+       15,
+       -1, 1, 339,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1247,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1100[] = {
-       1,
-       -1, 1, 203
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1248
 };
 static int parser_action_row1101[] = {
-       1,
-       -1, 1, 222
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1102[] = {
-       1,
-       -1, 1, 201
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1103[] = {
-       1,
-       -1, 1, 220
+       2,
+       -1, 1, 596,
+       52, 0, 277
 };
 static int parser_action_row1104[] = {
-       1,
-       -1, 1, 206
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1105[] = {
-       1,
-       -1, 1, 225
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1106[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1107[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1108[] = {
-       1,
-       -1, 1, 210
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1109[] = {
-       1,
-       -1, 1, 229
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1110[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1111[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1112[] = {
-       1,
-       -1, 1, 189
+       16,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1260,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       52, 0, 51,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1113[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1114[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1115[] = {
-       10,
-       -1, 1, 317,
-       59, 0, 1266,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1116[] = {
-       1,
-       -1, 1, 179
+       3,
+       -1, 1, 578,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1117[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1118[] = {
-       1,
-       -1, 1, 720
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1119[] = {
        2,
-       -1, 1, 723,
-       52, 0, 253
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1120[] = {
-       3,
-       -1, 1, 727,
-       52, 0, 253,
-       58, 0, 196
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1121[] = {
        2,
-       -1, 3, 1120,
-       89, 0, 1271
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1122[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 621
 };
 static int parser_action_row1123[] = {
-       2,
-       -1, 3, 1122,
-       45, 0, 1273
+       1,
+       -1, 1, 620
 };
 static int parser_action_row1124[] = {
-       4,
+       3,
        -1, 3, 1123,
-       31, 0, 1274,
-       47, 0, 365,
-       88, 0, 366
+       41, 0, 1272,
+       98, 0, 1273
 };
 static int parser_action_row1125[] = {
-       1,
-       -1, 1, 701
+       2,
+       -1, 1, 455,
+       97, 0, 1274
 };
 static int parser_action_row1126[] = {
        3,
-       -1, 1, 151,
-       24, 1, 833,
-       49, 1, 918
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1127[] = {
-       3,
-       -1, 1, 150,
-       24, 1, 832,
-       49, 1, 917
+       4,
+       -1, 1, 526,
+       29, 0, 1276,
+       30, 0, 1277,
+       32, 0, 1278
 };
 static int parser_action_row1128[] = {
-       2,
-       -1, 1, 247,
-       24, 1, 870
+       1,
+       -1, 1, 528
 };
 static int parser_action_row1129[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 533
 };
 static int parser_action_row1130[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       10,
+       -1, 1, 535,
+       39, 0, 1279,
+       80, 0, 1280,
+       84, 0, 1281,
+       85, 0, 1282,
+       86, 0, 1283,
+       87, 0, 1284,
+       89, 0, 1285,
+       90, 0, 1286,
+       92, 0, 1287
 };
 static int parser_action_row1131[] = {
        2,
-       -1, 1, 256,
-       24, 1, 873
+       -1, 1, 544,
+       81, 0, 1288
 };
 static int parser_action_row1132[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 546,
+       82, 0, 1289
 };
 static int parser_action_row1133[] = {
-       2,
-       -1, 1, 270,
-       24, 0, 1279
+       3,
+       -1, 1, 548,
+       88, 0, 1290,
+       91, 0, 1291
 };
 static int parser_action_row1134[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1280,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 550,
+       74, 0, 1292,
+       75, 0, 1293
 };
 static int parser_action_row1135[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 553,
+       76, 0, 1294,
+       78, 0, 1295,
+       79, 0, 1296
 };
 static int parser_action_row1136[] = {
-       2,
-       -1, 3, 1135,
-       57, 0, 1284
+       1,
+       -1, 1, 556
 };
 static int parser_action_row1137[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 1285,
-       46, 0, 620,
-       88, 0, 48,
-       89, 0, 1286
+       2,
+       -1, 1, 560,
+       77, 0, 1297
 };
 static int parser_action_row1138[] = {
-       2,
-       -1, 1, 185,
-       24, 1, 860
+       1,
+       -1, 1, 562
 };
 static int parser_action_row1139[] = {
        2,
-       -1, 1, 191,
-       24, 1, 866
+       -1, 1, 567,
+       73, 0, 1298
 };
 static int parser_action_row1140[] = {
-       2,
-       -1, 1, 182,
-       24, 1, 857
+       1,
+       -1, 1, 572
 };
 static int parser_action_row1141[] = {
-       1,
-       -1, 1, 251
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 1299
 };
 static int parser_action_row1142[] = {
-       3,
-       -1, 3, 1141,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 390
 };
 static int parser_action_row1143[] = {
-       1,
-       -1, 1, 249
+       2,
+       -1, 1, 453,
+       58, 0, 215
 };
 static int parser_action_row1144[] = {
        2,
-       -1, 1, 193,
-       24, 1, 868
+       -1, 3, 1143,
+       97, 0, 1301
 };
 static int parser_action_row1145[] = {
-       2,
-       -1, 1, 184,
-       24, 1, 859
+       1,
+       -1, 1, 76
 };
 static int parser_action_row1146[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1147[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 326,
-       59, 0, 642,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 326,
-       70, 1, 326,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 16
 };
 static int parser_action_row1148[] = {
-       2,
-       -1, 3, 1147,
-       15, 0, 1291
+       1,
+       -1, 1, 17
 };
 static int parser_action_row1149[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 405,
+       57, 0, 829,
+       94, 0, 204
 };
 static int parser_action_row1150[] = {
-       1,
-       -1, 1, 317
+       2,
+       -1, 3, 1149,
+       53, 0, 1308
 };
 static int parser_action_row1151[] = {
-       2,
-       -1, 3, 1150,
-       55, 0, 1293
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 1309
 };
 static int parser_action_row1152[] = {
-       3,
-       -1, 3, 1151,
-       47, 0, 365,
-       88, 0, 366
+       1,
+       -1, 1, 153
 };
 static int parser_action_row1153[] = {
-       1,
-       -1, 1, 1004
+       25,
+       -1, 3, 1152,
+       41, 0, 1313,
+       47, 0, 396,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 424,
+       97, 0, 660
 };
 static int parser_action_row1154[] = {
-       2,
-       -1, 1, 745,
-       87, 0, 550
+       4,
+       -1, 1, 79,
+       0, 1, 496,
+       1, 1, 496,
+       95, 1, 496
 };
 static int parser_action_row1155[] = {
-       2,
-       -1, 3, 1154,
-       53, 0, 1296
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1156[] = {
-       1,
-       -1, 1, 746
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1157[] = {
-       1,
-       -1, 1, 338
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1158[] = {
-       1,
-       -1, 1, 342
+       3,
+       -1, 3, 1157,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1159[] = {
-       2,
-       -1, 1, 341,
-       52, 0, 253
+       1,
+       -1, 1, 494
 };
 static int parser_action_row1160[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 39,
+       96, 0, 1324
 };
 static int parser_action_row1161[] = {
        1,
-       -1, 1, 390
+       -1, 1, 26
 };
 static int parser_action_row1162[] = {
        1,
-       -1, 1, 392
+       -1, 1, 47
 };
 static int parser_action_row1163[] = {
-       1,
-       -1, 1, 393
+       2,
+       -1, 3, 1162,
+       9, 0, 1327
 };
 static int parser_action_row1164[] = {
        1,
-       -1, 1, 394
+       -1, 1, 1050
 };
 static int parser_action_row1165[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 1049
 };
 static int parser_action_row1166[] = {
-       2,
-       -1, 1, 406,
-       56, 0, 1300
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row1167[] = {
-       1,
-       -1, 1, 265
+       56,
+       -1, 1, 420,
+       12, 0, 116,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 117,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 118,
+       33, 0, 1329,
+       34, 0, 1330,
+       35, 0, 1331,
+       36, 0, 1332,
+       37, 0, 43,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       47, 0, 396,
+       48, 0, 125,
+       50, 0, 49,
+       51, 0, 1333,
+       52, 0, 1334,
+       54, 0, 619,
+       74, 0, 1335,
+       75, 0, 1336,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 1337,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 1338,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1168[] = {
-       2,
-       -1, 3, 1167,
-       55, 0, 1303
+       1,
+       -1, 1, 75
 };
 static int parser_action_row1169[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 1063
 };
 static int parser_action_row1170[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 1, 30,
+       6, 0, 1163,
+       13, 0, 32,
+       97, 0, 1164
 };
 static int parser_action_row1171[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 44
 };
 static int parser_action_row1172[] = {
-       11,
-       -1, 1, 318,
-       52, 0, 253,
-       59, 0, 1305,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 461
 };
 static int parser_action_row1173[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 411,
-       27, 0, 412,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1172,
+       45, 0, 1358
 };
 static int parser_action_row1174[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 3, 1173,
+       31, 0, 1359,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1175[] = {
        1,
-       -1, 1, 554
+       -1, 1, 209
 };
 static int parser_action_row1176[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 228
 };
 static int parser_action_row1177[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 1034,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 207
 };
 static int parser_action_row1178[] = {
-       3,
-       -1, 3, 1177,
-       47, 0, 1311,
-       88, 0, 1312
+       1,
+       -1, 1, 226
 };
 static int parser_action_row1179[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 212
 };
 static int parser_action_row1180[] = {
        1,
-       -1, 1, 569
+       -1, 1, 231
 };
 static int parser_action_row1181[] = {
-       1,
-       -1, 1, 570
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1182[] = {
-       1,
-       -1, 1, 571
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1183[] = {
        1,
-       -1, 1, 572
+       -1, 1, 216
 };
 static int parser_action_row1184[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 235
 };
 static int parser_action_row1185[] = {
-       3,
-       -1, 3, 1184,
-       41, 0, 1194,
-       90, 0, 1316
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1186[] = {
-       3,
-       -1, 3, 1185,
-       68, 0, 1217,
-       70, 0, 1317
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1187[] = {
        1,
-       -1, 1, 525
+       -1, 1, 195
 };
 static int parser_action_row1188[] = {
-       1,
-       -1, 1, 524
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1189[] = {
-       1,
-       -1, 1, 536
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1190[] = {
-       1,
-       -1, 1, 573
+       13,
+       -1, 1, 336,
+       59, 0, 1367,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1191[] = {
        1,
-       -1, 1, 574
+       -1, 1, 185
 };
 static int parser_action_row1192[] = {
-       1,
-       -1, 1, 575
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1193[] = {
        1,
-       -1, 1, 577
+       -1, 1, 770
 };
 static int parser_action_row1194[] = {
-       1,
-       -1, 1, 576
+       2,
+       -1, 1, 773,
+       52, 0, 277
 };
 static int parser_action_row1195[] = {
-       2,
-       -1, 1, 552,
-       52, 0, 253
+       3,
+       -1, 1, 777,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1196[] = {
-       1,
-       -1, 1, 534
-};
-static int parser_action_row1197[] = {
        2,
-       -1, 1, 542,
-       52, 0, 253
+       -1, 3, 1195,
+       97, 0, 1372
 };
-static int parser_action_row1198[] = {
+static int parser_action_row1197[] = {
        3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1198[] = {
+       2,
        -1, 3, 1197,
-       54, 0, 1320,
-       55, 0, 1321
+       45, 0, 1374
 };
 static int parser_action_row1199[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 3, 1198,
+       31, 0, 1375,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1200[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 1323
+       1,
+       -1, 1, 751
 };
 static int parser_action_row1201[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 157,
+       24, 1, 895,
+       49, 1, 980
 };
 static int parser_action_row1202[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 156,
+       24, 1, 894,
+       49, 1, 979
 };
 static int parser_action_row1203[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 256,
+       24, 1, 932
 };
 static int parser_action_row1204[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1205[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1206[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 267,
+       24, 1, 935
 };
 static int parser_action_row1207[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1208[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 281,
+       24, 0, 1380
 };
 static int parser_action_row1209[] = {
-       3,
+       34,
        -1, 1, 458,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       9, 0, 1381,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1210[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1211[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 1210,
+       57, 0, 1385
 };
 static int parser_action_row1212[] = {
-       3,
+       5,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 1386,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 1387
 };
 static int parser_action_row1213[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 191,
+       24, 1, 922
 };
 static int parser_action_row1214[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 197,
+       24, 1, 928
 };
 static int parser_action_row1215[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 188,
+       24, 1, 919
 };
 static int parser_action_row1216[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 262
 };
 static int parser_action_row1217[] = {
-       3,
+       34,
        -1, 1, 458,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1218[] = {
        1,
-       -1, 1, 568
+       -1, 1, 263
 };
 static int parser_action_row1219[] = {
-       3,
-       -1, 1, 458,
+       4,
+       -1, 3, 1218,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1220[] = {
-       3,
-       -1, 1, 550,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 258
 };
 static int parser_action_row1221[] = {
        2,
-       -1, 1, 438,
-       89, 0, 1344
+       -1, 1, 199,
+       24, 1, 930
 };
 static int parser_action_row1222[] = {
        2,
-       -1, 1, 436,
-       58, 0, 196
+       -1, 1, 190,
+       24, 1, 921
 };
 static int parser_action_row1223[] = {
-       2,
-       -1, 3, 1222,
-       9, 0, 1345
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1224[] = {
-       1,
-       -1, 1, 1015
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 345,
+       59, 0, 691,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 345,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1225[] = {
        2,
-       -1, 1, 28,
-       13, 0, 26
+       -1, 3, 1224,
+       15, 0, 1393
 };
 static int parser_action_row1226[] = {
-       8,
-       -1, 1, 458,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       4, 1, 395,
-       9, 1, 395,
-       15, 1, 395,
-       28, 1, 395,
-       101, 1, 395
+       1, 0, 2
 };
 static int parser_action_row1227[] = {
-       2,
-       -1, 1, 112,
-       68, 0, 1348
+       1,
+       -1, 1, 336
 };
 static int parser_action_row1228[] = {
        2,
-       -1, 1, 383,
-       57, 0, 771
+       -1, 3, 1227,
+       55, 0, 1395
 };
 static int parser_action_row1229[] = {
-       1,
-       -1, 1, 111
+       3,
+       -1, 3, 1228,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1230[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       57, 0, 771
+       1,
+       -1, 1, 1071
 };
 static int parser_action_row1231[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1232[] = {
-       1,
-       -1, 1, 999
+       2,
+       -1, 3, 1231,
+       53, 0, 1398
 };
 static int parser_action_row1233[] = {
        1,
-       -1, 1, 107
+       -1, 1, 798
 };
 static int parser_action_row1234[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1230
+       1,
+       -1, 1, 357
 };
 static int parser_action_row1235[] = {
        1,
-       -1, 1, 122
+       -1, 1, 361
 };
 static int parser_action_row1236[] = {
        2,
-       -1, 1, 116,
-       56, 0, 1355
+       -1, 1, 360,
+       52, 0, 277
 };
 static int parser_action_row1237[] = {
-       1,
-       -1, 1, 120
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1238[] = {
        1,
-       -1, 1, 121
+       -1, 1, 410
 };
 static int parser_action_row1239[] = {
-       2,
-       -1, 1, 125,
-       70, 0, 1358
+       1,
+       -1, 1, 412
 };
 static int parser_action_row1240[] = {
        1,
-       -1, 1, 123
+       -1, 1, 413
 };
 static int parser_action_row1241[] = {
-       2,
-       -1, 1, 78,
-       9, 0, 1359
+       1,
+       -1, 1, 414
 };
 static int parser_action_row1242[] = {
-       1,
-       -1, 1, 452
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1243[] = {
-       1,
-       -1, 1, 463
+       2,
+       -1, 1, 425,
+       56, 0, 1402
 };
 static int parser_action_row1244[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       1,
+       -1, 1, 276
 };
 static int parser_action_row1245[] = {
-       1,
-       -1, 1, 467
+       2,
+       -1, 3, 1244,
+       55, 0, 1405
 };
 static int parser_action_row1246[] = {
-       3,
-       -1, 1, 149,
-       57, 0, 306,
-       87, 0, 185
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1247[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1363
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1248[] = {
-       1,
-       -1, 1, 26
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1249[] = {
-       1,
-       -1, 1, 45
+       14,
+       -1, 1, 337,
+       52, 0, 277,
+       59, 0, 1407,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1250[] = {
-       2,
-       -1, 3, 1249,
-       9, 0, 1367
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1251[] = {
-       1,
-       -1, 1, 988
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1252[] = {
        1,
-       -1, 1, 987
+       -1, 1, 594
 };
 static int parser_action_row1253[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1254[] = {
-       52,
-       -1, 1, 401,
-       12, 0, 107,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 108,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 109,
-       33, 0, 1369,
-       34, 0, 1370,
-       35, 0, 1371,
-       36, 0, 1372,
-       37, 0, 38,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       47, 0, 365,
-       48, 0, 116,
-       50, 0, 44,
-       51, 0, 1373,
-       52, 0, 1374,
-       54, 0, 575,
-       71, 0, 1375,
-       72, 0, 1376,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 1377,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1255[] = {
-       1,
-       -1, 1, 73
+       3,
+       -1, 3, 1254,
+       47, 0, 1413,
+       96, 0, 1414
 };
 static int parser_action_row1256[] = {
-       1,
-       -1, 1, 998
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1257[] = {
-       5,
-       -1, 1, 28,
-       6, 0, 1250,
-       9, 1, 42,
-       13, 0, 26,
-       89, 0, 1251
+       1,
+       -1, 1, 611
 };
 static int parser_action_row1258[] = {
        1,
-       -1, 1, 346
+       -1, 1, 612
 };
 static int parser_action_row1259[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 613
 };
 static int parser_action_row1260[] = {
+       1,
+       -1, 1, 614
+};
+static int parser_action_row1261[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1261[] = {
-       1,
-       -1, 1, 205
-};
 static int parser_action_row1262[] = {
-       1,
-       -1, 1, 224
+       3,
+       -1, 3, 1261,
+       41, 0, 1272,
+       98, 0, 1418
 };
 static int parser_action_row1263[] = {
-       1,
-       -1, 1, 209
+       2,
+       -1, 3, 1262,
+       73, 0, 1419
 };
 static int parser_action_row1264[] = {
        1,
-       -1, 1, 228
+       -1, 1, 564
 };
 static int parser_action_row1265[] = {
        1,
-       -1, 1, 208
+       -1, 1, 563
 };
 static int parser_action_row1266[] = {
        1,
-       -1, 1, 227
+       -1, 1, 565
 };
 static int parser_action_row1267[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 576
 };
 static int parser_action_row1268[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 615
 };
 static int parser_action_row1269[] = {
-       2,
-       -1, 3, 1268,
-       24, 0, 1401
+       1,
+       -1, 1, 616
 };
 static int parser_action_row1270[] = {
        1,
-       -1, 1, 722
+       -1, 1, 617
 };
 static int parser_action_row1271[] = {
        1,
-       -1, 1, 726
+       -1, 1, 619
 };
 static int parser_action_row1272[] = {
-       2,
-       -1, 1, 725,
-       52, 0, 253
+       1,
+       -1, 1, 618
 };
 static int parser_action_row1273[] = {
-       1,
-       -1, 1, 428
+       2,
+       -1, 1, 592,
+       52, 0, 277
 };
 static int parser_action_row1274[] = {
        1,
-       -1, 1, 730
+       -1, 1, 574
 };
 static int parser_action_row1275[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 582,
+       52, 0, 277
 };
 static int parser_action_row1276[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1275,
+       54, 0, 1422,
+       55, 0, 1423
 };
 static int parser_action_row1277[] = {
-       2,
-       -1, 3, 1276,
-       23, 0, 1405
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1278[] = {
-       2,
-       -1, 3, 1277,
-       15, 0, 1406
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       24, 0, 1425
 };
 static int parser_action_row1279[] = {
-       2,
-       -1, 3, 1278,
-       28, 0, 1407
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1280[] = {
-       33,
-       -1, 1, 440,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 1280,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1, 0, 2
 };
 static int parser_action_row1281[] = {
-       2,
-       -1, 1, 152,
-       24, 1, 834
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1282[] = {
-       31,
-       -1, 1, 440,
-       9, 0, 1409,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1283[] = {
-       1,
-       -1, 1, 881
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1284[] = {
-       2,
-       -1, 3, 1283,
-       15, 0, 1411
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1285[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1286[] = {
-       27,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 332,
-       68, 1, 332,
-       70, 1, 332,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1287[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 314,
-       58, 0, 196,
-       59, 0, 788,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 314,
-       70, 1, 314,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1288[] = {
        3,
-       -1, 1, 437,
-       12, 0, 1415,
-       89, 0, 1416
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1289[] = {
-       4,
-       -1, 1, 439,
-       12, 0, 1417,
-       88, 0, 48,
-       89, 0, 1418
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1290[] = {
-       2,
-       -1, 1, 192,
-       24, 1, 867
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1291[] = {
-       2,
-       -1, 1, 183,
-       24, 1, 858
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1292[] = {
-       33,
-       -1, 1, 440,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 143,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1, 0, 2
 };
 static int parser_action_row1293[] = {
-       2,
-       -1, 3, 1292,
-       24, 0, 1422
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1294[] = {
-       2,
-       -1, 1, 745,
-       87, 0, 550
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1295[] = {
-       1,
-       -1, 1, 146
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1296[] = {
-       1,
-       -1, 1, 582
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1297[] = {
-       1,
-       -1, 1, 743
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1298[] = {
-       1,
-       -1, 1, 340
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1299[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1300[] = {
-       2,
-       -1, 3, 1299,
-       53, 0, 1425
+       3,
+       -1, 1, 590,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1301[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 456,
+       97, 0, 1449
 };
 static int parser_action_row1302[] = {
-       1,
-       -1, 1, 1017
+       2,
+       -1, 1, 454,
+       58, 0, 215
 };
 static int parser_action_row1303[] = {
-       2,
-       -1, 1, 407,
-       56, 0, 1300
+       1,
+       -1, 1, 1064
 };
 static int parser_action_row1304[] = {
        2,
-       -1, 1, 384,
-       87, 0, 185
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row1305[] = {
-       1,
-       -1, 1, 142
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1451,
+       95, 0, 3
 };
 static int parser_action_row1306[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 118,
+       71, 0, 1453
 };
 static int parser_action_row1307[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 404,
+       57, 0, 829
 };
 static int parser_action_row1308[] = {
        1,
-       -1, 1, 371
+       -1, 1, 117
 };
 static int parser_action_row1309[] = {
-       3,
-       -1, 1, 458,
+       4,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       57, 0, 829
 };
 static int parser_action_row1310[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1311[] = {
        1,
-       -1, 1, 502
+       -1, 1, 1066
 };
 static int parser_action_row1312[] = {
-       2,
-       -1, 3, 1311,
-       88, 0, 1432
+       1,
+       -1, 1, 113
 };
 static int parser_action_row1313[] = {
-       2,
-       -1, 1, 745,
-       87, 0, 550
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 1309
 };
 static int parser_action_row1314[] = {
-       3,
-       -1, 1, 529,
-       52, 0, 253,
-       70, 0, 1434
+       1,
+       -1, 1, 128
 };
 static int parser_action_row1315[] = {
-       1,
-       -1, 1, 526
+       2,
+       -1, 1, 122,
+       56, 0, 1460
 };
 static int parser_action_row1316[] = {
-       3,
-       -1, 3, 1315,
-       47, 0, 1311,
-       88, 0, 1312
+       1,
+       -1, 1, 126
 };
 static int parser_action_row1317[] = {
-       3,
-       -1, 1, 531,
-       68, 1, 534,
-       70, 1, 534
+       1,
+       -1, 1, 127
 };
 static int parser_action_row1318[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 131,
+       73, 0, 1463
 };
 static int parser_action_row1319[] = {
        1,
-       -1, 1, 551
+       -1, 1, 129
 };
 static int parser_action_row1320[] = {
-       1,
-       -1, 1, 540
+       9,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       4, 1, 80,
+       9, 0, 1464,
+       15, 1, 80,
+       28, 1, 80,
+       95, 0, 3,
+       109, 1, 80
 };
 static int parser_action_row1321[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 470
 };
 static int parser_action_row1322[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 491
 };
 static int parser_action_row1323[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 1034,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1324[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 495
 };
 static int parser_action_row1325[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 1034,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       3,
+       -1, 1, 155,
+       57, 0, 333,
+       94, 0, 204
 };
 static int parser_action_row1326[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 1034,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 3, 1325,
+       55, 0, 1468
 };
 static int parser_action_row1327[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 1, 37,
+       56, 0, 1469
 };
 static int parser_action_row1328[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 27
 };
 static int parser_action_row1329[] = {
-       3,
+       7,
        -1, 3, 1328,
-       47, 0, 1446,
-       88, 0, 1447
+       10, 0, 1472,
+       11, 0, 1473,
+       12, 0, 1474,
+       16, 0, 1475,
+       38, 0, 1476,
+       41, 0, 1477
 };
 static int parser_action_row1330[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       26,
+       -1, 1, 1003,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1331[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 1, 1008,
+       49, 0, 197
 };
 static int parser_action_row1332[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 1, 1005,
+       49, 0, 197
 };
 static int parser_action_row1333[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 1007
 };
 static int parser_action_row1334[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       2,
+       -1, 3, 1333,
+       11, 0, 1481
 };
 static int parser_action_row1335[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1336[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       24,
+       -1, 1, 498,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1337[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       24,
+       -1, 1, 499,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1338[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       24,
+       -1, 1, 507,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1339[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       15,
+       -1, 1, 756,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1483,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1340[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 802
 };
 static int parser_action_row1341[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 1001
 };
 static int parser_action_row1342[] = {
-       20,
-       -1, 1, 440,
-       12, 0, 1034,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       1,
+       -1, 1, 1010
 };
 static int parser_action_row1343[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 1462,
-       46, 0, 1463,
-       88, 0, 48,
-       89, 0, 1464
+       1,
+       -1, 1, 1012
 };
 static int parser_action_row1344[] = {
        1,
-       -1, 1, 548
+       -1, 1, 1011
 };
 static int parser_action_row1345[] = {
-       2,
-       -1, 1, 546,
-       52, 0, 253
+       1,
+       -1, 1, 1013
 };
 static int parser_action_row1346[] = {
        1,
-       -1, 1, 75
+       -1, 1, 1014
 };
 static int parser_action_row1347[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 214,
-       19, 0, 215,
-       20, 0, 216,
-       21, 0, 217
+       1,
+       -1, 1, 1015
 };
 static int parser_action_row1348[] = {
        1,
-       -1, 1, 1016
+       -1, 1, 421
 };
 static int parser_action_row1349[] = {
-       1,
-       -1, 1, 114
+       3,
+       -1, 3, 1348,
+       41, 0, 300,
+       98, 0, 1486
 };
 static int parser_action_row1350[] = {
-       2,
-       -1, 1, 113,
-       68, 0, 1470
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1487
 };
 static int parser_action_row1351[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 806
 };
 static int parser_action_row1352[] = {
        1,
-       -1, 1, 104
+       -1, 1, 1002
 };
 static int parser_action_row1353[] = {
-       2,
-       -1, 3, 1352,
-       89, 0, 1076
+       1,
+       -1, 1, 803
 };
 static int parser_action_row1354[] = {
-       1,
-       -1, 1, 1000
+       3,
+       -1, 1, 739,
+       54, 0, 244,
+       73, 0, 1488
 };
 static int parser_action_row1355[] = {
        1,
-       -1, 1, 108
+       -1, 1, 424
 };
 static int parser_action_row1356[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 800,
+       56, 0, 1402
 };
 static int parser_action_row1357[] = {
        1,
-       -1, 1, 1001
+       -1, 1, 804
 };
 static int parser_action_row1358[] = {
-       2,
-       -1, 1, 117,
-       56, 0, 1355
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1491
 };
 static int parser_action_row1359[] = {
-       20,
-       -1, 3, 1358,
-       46, 0, 1475,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 48,
-       89, 0, 611
-};
-static int parser_action_row1360[] = {
        1,
-       -1, 1, 469
+       -1, 1, 365
+};
+static int parser_action_row1360[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1361[] = {
-       1,
-       -1, 1, 464
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1362[] = {
        1,
-       -1, 1, 39
+       -1, 1, 211
 };
 static int parser_action_row1363[] = {
-       2,
-       -1, 1, 149,
-       57, 0, 306
+       1,
+       -1, 1, 230
 };
 static int parser_action_row1364[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 215
 };
 static int parser_action_row1365[] = {
        1,
-       -1, 1, 995
+       -1, 1, 234
 };
 static int parser_action_row1366[] = {
-       2,
-       -1, 3, 1365,
-       55, 0, 1479
+       1,
+       -1, 1, 214
 };
 static int parser_action_row1367[] = {
-       4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1363
+       1,
+       -1, 1, 233
 };
 static int parser_action_row1368[] = {
-       1,
-       -1, 1, 27
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1369[] = {
-       7,
-       -1, 3, 1368,
-       10, 0, 1482,
-       11, 0, 1483,
-       12, 0, 1484,
-       16, 0, 1485,
-       38, 0, 1486,
-       41, 0, 1487
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1370[] = {
-       25,
-       -1, 1, 941,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1369,
+       24, 0, 1497
 };
 static int parser_action_row1371[] = {
-       2,
-       -1, 1, 946,
-       49, 0, 178
+       1,
+       -1, 1, 772
 };
 static int parser_action_row1372[] = {
-       2,
-       -1, 1, 943,
-       49, 0, 178
+       1,
+       -1, 1, 776
 };
 static int parser_action_row1373[] = {
-       1,
-       -1, 1, 945
+       2,
+       -1, 1, 775,
+       52, 0, 277
 };
 static int parser_action_row1374[] = {
-       2,
-       -1, 3, 1373,
-       11, 0, 1491
+       1,
+       -1, 1, 446
 };
 static int parser_action_row1375[] = {
+       1,
+       -1, 1, 780
+};
+static int parser_action_row1376[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1376[] = {
-       23,
-       -1, 1, 470,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
 static int parser_action_row1377[] = {
-       23,
-       -1, 1, 471,
-       12, 0, 156,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1378[] = {
-       12,
-       -1, 1, 706,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 1493,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       2,
+       -1, 3, 1377,
+       23, 0, 1501
 };
 static int parser_action_row1379[] = {
-       1,
-       -1, 1, 750
+       2,
+       -1, 3, 1378,
+       15, 0, 1502
 };
 static int parser_action_row1380[] = {
-       1,
-       -1, 1, 939
+       2,
+       -1, 3, 1379,
+       28, 0, 1503
 };
 static int parser_action_row1381[] = {
-       1,
-       -1, 1, 948
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1381,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1382[] = {
-       1,
-       -1, 1, 950
+       2,
+       -1, 1, 158,
+       24, 1, 896
 };
 static int parser_action_row1383[] = {
-       1,
-       -1, 1, 949
+       31,
+       -1, 1, 458,
+       9, 0, 1505,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1384[] = {
        1,
-       -1, 1, 951
+       -1, 1, 943
 };
 static int parser_action_row1385[] = {
-       1,
-       -1, 1, 952
+       2,
+       -1, 3, 1384,
+       15, 0, 1507
 };
 static int parser_action_row1386[] = {
-       1,
-       -1, 1, 953
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1387[] = {
-       1,
-       -1, 1, 402
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 351,
+       73, 1, 351,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1388[] = {
-       3,
-       -1, 3, 1387,
-       41, 0, 275,
-       90, 0, 1496
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 333,
+       58, 0, 215,
+       59, 0, 846,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 333,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1389[] = {
-       18,
-       -1, 1, 437,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 1497
+       3,
+       -1, 1, 455,
+       12, 0, 1511,
+       97, 0, 1512
 };
 static int parser_action_row1390[] = {
-       1,
-       -1, 1, 754
+       4,
+       -1, 1, 457,
+       12, 0, 1513,
+       96, 0, 53,
+       97, 0, 1514
 };
 static int parser_action_row1391[] = {
        1,
-       -1, 1, 940
+       -1, 1, 260
 };
 static int parser_action_row1392[] = {
-       1,
-       -1, 1, 751
+       2,
+       -1, 1, 198,
+       24, 1, 929
 };
 static int parser_action_row1393[] = {
-       4,
-       -1, 1, 689,
-       54, 0, 223,
-       68, 0, 297,
-       70, 0, 1498
+       2,
+       -1, 1, 189,
+       24, 1, 920
 };
 static int parser_action_row1394[] = {
-       1,
-       -1, 1, 405
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1395[] = {
        2,
-       -1, 1, 748,
-       56, 0, 1300
+       -1, 3, 1394,
+       24, 0, 1518
 };
 static int parser_action_row1396[] = {
-       1,
-       -1, 1, 752
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1397[] = {
-       19,
-       -1, 1, 439,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       88, 0, 48,
-       89, 0, 1501
+       1,
+       -1, 1, 152
 };
 static int parser_action_row1398[] = {
-       2,
-       -1, 3, 1397,
-       45, 0, 1503
+       1,
+       -1, 1, 624
 };
 static int parser_action_row1399[] = {
-       2,
-       -1, 3, 1398,
-       53, 0, 1504
+       1,
+       -1, 1, 795
 };
 static int parser_action_row1400[] = {
        1,
-       -1, 1, 207
+       -1, 1, 359
 };
 static int parser_action_row1401[] = {
-       1,
-       -1, 1, 226
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1402[] = {
+       2,
+       -1, 3, 1401,
+       53, 0, 1521
+};
+static int parser_action_row1403[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1403[] = {
-       1,
-       -1, 1, 724
-};
 static int parser_action_row1404[] = {
-       2,
-       -1, 3, 1403,
-       45, 0, 1506
+       1,
+       -1, 1, 1082
 };
 static int parser_action_row1405[] = {
        2,
-       -1, 3, 1404,
-       53, 0, 1507
+       -1, 1, 426,
+       56, 0, 1402
 };
 static int parser_action_row1406[] = {
-       34,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 827,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       24, 0, 831,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1407[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 968,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 148
 };
 static int parser_action_row1408[] = {
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1409[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1409[] = {
-       1,
-       -1, 1, 882
-};
 static int parser_action_row1410[] = {
-       2,
-       -1, 1, 151,
-       24, 1, 833
+       1,
+       -1, 1, 392
 };
 static int parser_action_row1411[] = {
-       2,
-       -1, 1, 150,
-       24, 1, 832
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1412[] = {
-       33,
-       -1, 1, 440,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 968,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1, 0, 2
 };
 static int parser_action_row1413[] = {
-       2,
-       -1, 1, 194,
-       24, 1, 869
+       1,
+       -1, 1, 534
 };
 static int parser_action_row1414[] = {
        2,
-       -1, 1, 186,
-       24, 1, 861
+       -1, 3, 1413,
+       96, 0, 1528
 };
 static int parser_action_row1415[] = {
        2,
-       -1, 1, 177,
-       24, 1, 852
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1416[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 569,
+       52, 0, 277,
+       73, 0, 1530
 };
 static int parser_action_row1417[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 316,
-       59, 0, 940,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 316,
-       70, 1, 316,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 566
 };
 static int parser_action_row1418[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 3, 1417,
+       47, 0, 1413,
+       96, 0, 1414
 };
 static int parser_action_row1419[] = {
-       37,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 320,
-       58, 0, 196,
-       59, 0, 945,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 320,
-       70, 1, 320,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 1, 571,
+       73, 1, 574
 };
 static int parser_action_row1420[] = {
        3,
-       -1, 1, 438,
-       12, 0, 1518,
-       89, 0, 1519
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1421[] = {
        1,
-       -1, 1, 261
+       -1, 1, 591
 };
 static int parser_action_row1422[] = {
-       2,
-       -1, 3, 1421,
-       49, 0, 178
+       1,
+       -1, 1, 580
 };
 static int parser_action_row1423[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1424[] = {
-       1,
-       -1, 1, 583
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1425[] = {
-       3,
+       22,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1426[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1427[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1428[] = {
-       1,
-       -1, 1, 1018
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1429[] = {
-       1,
-       -1, 1, 143
+       3,
+       -1, 3, 1428,
+       47, 0, 1540,
+       96, 0, 1541
 };
 static int parser_action_row1430[] = {
-       2,
-       -1, 1, 369,
-       24, 0, 1422
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1431[] = {
-       2,
-       -1, 3, 1430,
-       15, 0, 1525
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1432[] = {
-       2,
-       -1, 3, 1431,
-       23, 0, 1526
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1433[] = {
-       2,
-       -1, 1, 745,
-       87, 0, 550
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1434[] = {
-       1,
-       -1, 1, 755
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1435[] = {
-       3,
+       21,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1436[] = {
-       1,
-       -1, 1, 528
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1437[] = {
-       2,
-       -1, 3, 1436,
-       70, 0, 1434
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1438[] = {
-       5,
-       -1, 1, 440,
-       12, 0, 1462,
-       46, 0, 1463,
-       88, 0, 48,
-       89, 0, 1464
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1439[] = {
-       1,
-       -1, 1, 360
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1440[] = {
-       1,
-       -1, 1, 359
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1441[] = {
-       1,
-       -1, 1, 498
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1442[] = {
        21,
-       -1, 1, 440,
-       12, 0, 1034,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1443[] = {
-       1,
-       -1, 1, 497
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1444[] = {
-       1,
-       -1, 1, 500
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1445[] = {
-       3,
-       -1, 1, 508,
-       71, 0, 1204,
-       72, 0, 1205
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1446[] = {
-       3,
-       -1, 1, 511,
-       71, 0, 1204,
-       72, 0, 1205
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1447[] = {
-       2,
-       -1, 3, 1446,
-       88, 0, 1531
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1448[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       5,
+       -1, 1, 458,
+       12, 0, 1561,
+       46, 0, 1562,
+       96, 0, 53,
+       97, 0, 1563
 };
 static int parser_action_row1449[] = {
        1,
-       -1, 1, 513
+       -1, 1, 588
 };
 static int parser_action_row1450[] = {
-       4,
-       -1, 1, 515,
-       73, 0, 1213,
-       75, 0, 1214,
-       76, 0, 1215
+       2,
+       -1, 1, 586,
+       52, 0, 277
 };
 static int parser_action_row1451[] = {
-       4,
-       -1, 1, 516,
-       73, 0, 1213,
-       75, 0, 1214,
-       76, 0, 1215
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row1452[] = {
-       3,
-       -1, 1, 504,
-       71, 0, 1204,
-       72, 0, 1205
+       1,
+       -1, 1, 77
 };
 static int parser_action_row1453[] = {
-       3,
-       -1, 1, 505,
-       71, 0, 1204,
-       72, 0, 1205
+       1,
+       -1, 1, 1065
 };
 static int parser_action_row1454[] = {
-       3,
-       -1, 1, 506,
-       71, 0, 1204,
-       72, 0, 1205
+       1,
+       -1, 1, 120
 };
 static int parser_action_row1455[] = {
-       3,
-       -1, 1, 507,
-       71, 0, 1204,
-       72, 0, 1205
+       2,
+       -1, 1, 119,
+       71, 0, 1569
 };
 static int parser_action_row1456[] = {
        3,
-       -1, 1, 509,
-       71, 0, 1204,
-       72, 0, 1205
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1457[] = {
-       3,
-       -1, 1, 510,
-       71, 0, 1204,
-       72, 0, 1205
+       1,
+       -1, 1, 110
 };
 static int parser_action_row1458[] = {
-       3,
-       -1, 1, 512,
-       71, 0, 1204,
-       72, 0, 1205
+       2,
+       -1, 3, 1457,
+       97, 0, 1148
 };
 static int parser_action_row1459[] = {
        1,
-       -1, 1, 518
+       -1, 1, 1067
 };
 static int parser_action_row1460[] = {
        1,
-       -1, 1, 519
+       -1, 1, 114
 };
 static int parser_action_row1461[] = {
-       1,
-       -1, 1, 520
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1462[] = {
        1,
-       -1, 1, 522
+       -1, 1, 1068
 };
 static int parser_action_row1463[] = {
        2,
-       -1, 1, 555,
-       52, 0, 253
+       -1, 1, 123,
+       56, 0, 1460
 };
 static int parser_action_row1464[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 3, 1463,
+       46, 0, 1574,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1465[] = {
-       3,
-       -1, 1, 537,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 497
 };
 static int parser_action_row1466[] = {
-       2,
-       -1, 3, 1465,
-       90, 0, 1536
+       1,
+       -1, 1, 492
 };
 static int parser_action_row1467[] = {
-       2,
-       -1, 1, 437,
-       89, 0, 1537
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1468[] = {
-       3,
-       -1, 1, 439,
-       88, 0, 48,
-       89, 0, 1538
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row1469[] = {
-       1,
-       -1, 1, 544
+       6,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 0, 84,
+       95, 0, 3,
+       109, 0, 85
 };
 static int parser_action_row1470[] = {
-       4,
-       -1, 3, 1469,
-       6, 0, 734,
-       17, 0, 735,
-       89, 0, 736
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1471[] = {
        1,
-       -1, 1, 115
+       -1, 1, 1060
 };
 static int parser_action_row1472[] = {
-       1,
-       -1, 1, 103
+       2,
+       -1, 1, 38,
+       56, 0, 1469
 };
 static int parser_action_row1473[] = {
-       1,
-       -1, 1, 110
+       23,
+       -1, 3, 1472,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1474[] = {
-       21,
+       2,
        -1, 3, 1473,
-       41, 0, 1234,
-       47, 0, 365,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 389,
-       89, 0, 611
+       96, 0, 1583
 };
 static int parser_action_row1475[] = {
-       1,
-       -1, 1, 1002
+       27,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       54, 0, 640,
+       57, 0, 829,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1476[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 1475,
+       97, 0, 1586
 };
 static int parser_action_row1477[] = {
-       1,
-       -1, 1, 124
+       27,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       54, 0, 640,
+       57, 0, 829,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1478[] = {
-       1,
-       -1, 1, 40
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1479[] = {
-       2,
-       -1, 3, 1478,
-       88, 0, 1245
+       1,
+       -1, 1, 1004
 };
 static int parser_action_row1480[] = {
        1,
-       -1, 1, 35
+       -1, 1, 1009
 };
 static int parser_action_row1481[] = {
        1,
-       -1, 1, 996
+       -1, 1, 1006
 };
 static int parser_action_row1482[] = {
-       2,
+       3,
        -1, 3, 1481,
-       55, 0, 1544
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1483[] = {
-       19,
-       -1, 3, 1482,
-       54, 0, 595,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 48,
-       89, 0, 611
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1484[] = {
-       2,
-       -1, 3, 1483,
-       88, 0, 1546
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1485[] = {
-       23,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 770,
-       54, 0, 595,
-       57, 0, 771,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 48,
-       89, 0, 611
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1486[] = {
-       2,
-       -1, 3, 1485,
-       89, 0, 1549
+       13,
+       -1, 1, 755,
+       59, 0, 1594,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1487[] = {
-       23,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 770,
-       54, 0, 595,
-       57, 0, 771,
-       71, 0, 596,
-       72, 0, 597,
-       73, 0, 598,
-       74, 0, 599,
-       75, 0, 600,
-       76, 0, 601,
-       77, 0, 602,
-       78, 0, 603,
-       79, 0, 604,
-       80, 0, 605,
-       81, 0, 606,
-       82, 0, 607,
-       83, 0, 608,
-       84, 0, 609,
-       85, 0, 610,
-       88, 0, 48,
-       89, 0, 611
+       13,
+       -1, 1, 746,
+       59, 0, 1596,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1488[] = {
+       14,
+       -1, 1, 758,
+       52, 0, 277,
+       59, 0, 1598,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1489[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1489[] = {
-       1,
-       -1, 1, 942
-};
 static int parser_action_row1490[] = {
-       1,
-       -1, 1, 947
+       13,
+       -1, 1, 769,
+       59, 0, 1602,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1491[] = {
-       1,
-       -1, 1, 944
+       2,
+       -1, 1, 801,
+       56, 0, 1402
 };
 static int parser_action_row1492[] = {
-       3,
-       -1, 3, 1491,
-       47, 0, 365,
-       88, 0, 366
+       15,
+       -1, 1, 762,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1604,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1493[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1607
 };
 static int parser_action_row1494[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1493,
+       45, 0, 1608
 };
 static int parser_action_row1495[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1494,
+       53, 0, 1609
 };
 static int parser_action_row1496[] = {
-       10,
-       -1, 1, 705,
-       59, 0, 1557,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 213
 };
 static int parser_action_row1497[] = {
-       10,
-       -1, 1, 696,
-       59, 0, 1559,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 232
 };
 static int parser_action_row1498[] = {
-       11,
-       -1, 1, 708,
-       52, 0, 253,
-       59, 0, 1561,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
-};
-static int parser_action_row1499[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1499[] = {
+       1,
+       -1, 1, 774
+};
 static int parser_action_row1500[] = {
-       10,
-       -1, 1, 719,
-       59, 0, 1565,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       2,
+       -1, 3, 1499,
+       45, 0, 1611
 };
 static int parser_action_row1501[] = {
        2,
-       -1, 1, 749,
-       56, 0, 1300
+       -1, 3, 1500,
+       53, 0, 1612
 };
 static int parser_action_row1502[] = {
-       12,
-       -1, 1, 712,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 1567,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       35,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 886,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       24, 0, 890,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1503[] = {
-       18,
-       -1, 1, 438,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 1570
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1504[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1505[] = {
        1,
-       -1, 1, 344
+       -1, 1, 944
 };
 static int parser_action_row1506[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 1, 157,
+       24, 1, 895
 };
 static int parser_action_row1507[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 156,
+       24, 1, 894
 };
 static int parser_action_row1508[] = {
-       1,
-       -1, 1, 728
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1509[] = {
        2,
-       -1, 3, 1508,
-       24, 0, 1574
+       -1, 1, 200,
+       24, 1, 931
 };
 static int parser_action_row1510[] = {
-       1,
-       -1, 1, 876
+       2,
+       -1, 1, 192,
+       24, 1, 923
 };
 static int parser_action_row1511[] = {
        2,
-       -1, 3, 1510,
-       49, 0, 178
+       -1, 1, 183,
+       24, 1, 914
 };
 static int parser_action_row1512[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1513[] = {
-       1,
-       -1, 1, 880
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 335,
+       59, 0, 1007,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 335,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1514[] = {
-       2,
-       -1, 3, 1513,
-       49, 0, 178
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1515[] = {
-       2,
-       -1, 1, 188,
-       24, 1, 863
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 339,
+       58, 0, 215,
+       59, 0, 1012,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 339,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1516[] = {
-       2,
-       -1, 1, 178,
-       24, 1, 853
+       3,
+       -1, 1, 456,
+       12, 0, 1623,
+       97, 0, 1624
 };
 static int parser_action_row1517[] = {
-       2,
-       -1, 1, 190,
-       24, 1, 865
+       1,
+       -1, 1, 272
 };
 static int parser_action_row1518[] = {
        2,
-       -1, 1, 180,
-       24, 1, 855
+       -1, 3, 1517,
+       49, 0, 197
 };
 static int parser_action_row1519[] = {
-       24,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 451,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1520[] = {
-       36,
-       -1, 1, 423,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 440,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 318,
-       59, 0, 1112,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205,
-       68, 1, 318,
-       70, 1, 318,
-       71, 0, 118,
-       72, 0, 119,
-       88, 0, 48,
-       89, 0, 120,
-       90, 1, 440,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       1,
+       -1, 1, 625
 };
 static int parser_action_row1521[] = {
-       1,
-       -1, 1, 260
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1522[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1523[] = {
-       2,
-       -1, 3, 1522,
-       53, 0, 1581
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1524[] = {
        1,
-       -1, 1, 386
+       -1, 1, 1083
 };
 static int parser_action_row1525[] = {
        1,
-       -1, 1, 408
+       -1, 1, 149
 };
 static int parser_action_row1526[] = {
-       24,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 411,
-       27, 0, 412,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 390,
+       24, 0, 1518
 };
 static int parser_action_row1527[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 1526,
+       15, 0, 1630
 };
 static int parser_action_row1528[] = {
-       1,
-       -1, 1, 756
+       2,
+       -1, 3, 1527,
+       23, 0, 1631
 };
 static int parser_action_row1529[] = {
-       3,
-       -1, 3, 1528,
-       88, 0, 48,
-       89, 0, 1584
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1530[] = {
-       2,
-       -1, 3, 1529,
-       90, 0, 1587
+       1,
+       -1, 1, 807
 };
 static int parser_action_row1531[] = {
-       1,
-       -1, 1, 499
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1532[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 568
 };
 static int parser_action_row1533[] = {
-       1,
-       -1, 1, 492
+       2,
+       -1, 3, 1532,
+       73, 0, 1530
 };
 static int parser_action_row1534[] = {
-       1,
-       -1, 1, 553
+       5,
+       -1, 1, 458,
+       12, 0, 1561,
+       46, 0, 1562,
+       96, 0, 53,
+       97, 0, 1563
 };
 static int parser_action_row1535[] = {
-       3,
-       -1, 3, 1534,
-       31, 0, 1589,
-       52, 0, 1590
+       1,
+       -1, 1, 381
 };
 static int parser_action_row1536[] = {
        1,
-       -1, 1, 535
+       -1, 1, 380
 };
 static int parser_action_row1537[] = {
        1,
-       -1, 1, 533
+       -1, 1, 530
 };
 static int parser_action_row1538[] = {
-       2,
-       -1, 1, 541,
-       52, 0, 253
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1539[] = {
-       3,
-       -1, 1, 549,
-       52, 0, 253,
-       58, 0, 196
+       1,
+       -1, 1, 529
 };
 static int parser_action_row1540[] = {
-       2,
-       -1, 1, 438,
-       89, 0, 1593
+       1,
+       -1, 1, 532
 };
 static int parser_action_row1541[] = {
-       52,
-       -1, 1, 440,
-       0, 0, 83,
-       1, 0, 84,
-       12, 0, 107,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 108,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 109,
-       33, 0, 1369,
-       34, 0, 1370,
-       35, 0, 1371,
-       36, 0, 1372,
-       37, 0, 38,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       47, 0, 365,
-       48, 0, 116,
-       50, 0, 44,
-       51, 0, 1373,
-       52, 0, 1594,
-       54, 0, 575,
-       71, 0, 1375,
-       72, 0, 1376,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 1377,
-       91, 0, 121,
-       92, 0, 122,
-       93, 0, 123,
-       94, 0, 124,
-       95, 0, 54,
-       98, 0, 125
+       2,
+       -1, 3, 1540,
+       96, 0, 1636
 };
 static int parser_action_row1542[] = {
-       1,
-       -1, 1, 119
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1543[] = {
-       5,
-       -1, 3, 1542,
-       31, 0, 1598,
-       47, 0, 1599,
-       52, 0, 1600,
-       88, 0, 366
+       1,
+       -1, 1, 543
 };
 static int parser_action_row1544[] = {
-       1,
-       -1, 1, 38
+       2,
+       -1, 1, 545,
+       81, 0, 1288
 };
 static int parser_action_row1545[] = {
-       1,
-       -1, 1, 36
+       2,
+       -1, 1, 536,
+       80, 0, 1280
 };
 static int parser_action_row1546[] = {
-       5,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 770,
-       57, 0, 771
+       2,
+       -1, 1, 537,
+       80, 0, 1280
 };
 static int parser_action_row1547[] = {
        2,
-       -1, 3, 1546,
-       57, 0, 771
+       -1, 1, 538,
+       80, 0, 1280
 };
 static int parser_action_row1548[] = {
-       3,
-       -1, 3, 1547,
-       14, 0, 1604,
-       15, 0, 1605
+       2,
+       -1, 1, 539,
+       80, 0, 1280
 };
 static int parser_action_row1549[] = {
-       5,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 770,
-       57, 0, 771
+       2,
+       -1, 1, 540,
+       80, 0, 1280
 };
 static int parser_action_row1550[] = {
        2,
-       -1, 1, 149,
-       57, 0, 306
+       -1, 1, 541,
+       80, 0, 1280
 };
 static int parser_action_row1551[] = {
-       4,
-       -1, 1, 118,
-       4, 0, 918,
-       14, 0, 919,
-       15, 0, 1609
+       2,
+       -1, 1, 542,
+       80, 0, 1280
 };
 static int parser_action_row1552[] = {
-       5,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 770,
-       57, 0, 771
+       2,
+       -1, 1, 547,
+       82, 0, 1289
 };
 static int parser_action_row1553[] = {
        3,
-       -1, 3, 1552,
-       47, 0, 365,
-       88, 0, 366
+       -1, 1, 549,
+       88, 0, 1290,
+       91, 0, 1291
 };
 static int parser_action_row1554[] = {
-       2,
-       -1, 3, 1553,
-       57, 0, 1615
+       3,
+       -1, 1, 551,
+       74, 0, 1292,
+       75, 0, 1293
 };
 static int parser_action_row1555[] = {
-       2,
-       -1, 3, 1554,
-       53, 0, 1616
+       3,
+       -1, 1, 552,
+       74, 0, 1292,
+       75, 0, 1293
 };
 static int parser_action_row1556[] = {
-       1,
-       -1, 1, 629
+       4,
+       -1, 1, 554,
+       76, 0, 1294,
+       78, 0, 1295,
+       79, 0, 1296
 };
 static int parser_action_row1557[] = {
-       1,
-       -1, 1, 648
+       4,
+       -1, 1, 555,
+       76, 0, 1294,
+       78, 0, 1295,
+       79, 0, 1296
 };
 static int parser_action_row1558[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 557
 };
 static int parser_action_row1559[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 558
 };
 static int parser_action_row1560[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 559
 };
 static int parser_action_row1561[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 561
 };
 static int parser_action_row1562[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 595,
+       52, 0, 277
 };
 static int parser_action_row1563[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1564[] = {
-       10,
-       -1, 1, 707,
-       59, 0, 1623,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       3,
+       -1, 1, 577,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1565[] = {
-       21,
-       -1, 1, 440,
-       12, 0, 675,
-       46, 0, 676,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       88, 0, 48,
-       89, 0, 1625
+       2,
+       -1, 3, 1564,
+       98, 0, 1641
 };
 static int parser_action_row1566[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 455,
+       97, 0, 1642
 };
 static int parser_action_row1567[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 1643
 };
 static int parser_action_row1568[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 584
 };
 static int parser_action_row1569[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 3, 1568,
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row1570[] = {
-       10,
-       -1, 1, 711,
-       59, 0, 1634,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 121
 };
 static int parser_action_row1571[] = {
-       11,
-       -1, 1, 710,
-       52, 0, 253,
-       59, 0, 1636,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 109
 };
 static int parser_action_row1572[] = {
-       2,
-       -1, 3, 1571,
-       53, 0, 1639
+       1,
+       -1, 1, 116
 };
 static int parser_action_row1573[] = {
-       1,
-       -1, 1, 657
+       25,
+       -1, 3, 1572,
+       41, 0, 1313,
+       47, 0, 396,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 424,
+       97, 0, 660
 };
 static int parser_action_row1574[] = {
-       2,
-       -1, 3, 1573,
-       53, 0, 1640
+       1,
+       -1, 1, 1069
 };
 static int parser_action_row1575[] = {
-       33,
-       -1, 1, 440,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 1280,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1, 0, 2
 };
 static int parser_action_row1576[] = {
-       2,
-       -1, 1, 258,
-       24, 1, 875
+       1,
+       -1, 1, 130
 };
 static int parser_action_row1577[] = {
+       1,
+       -1, 1, 41
+};
+static int parser_action_row1578[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1578[] = {
-       2,
-       -1, 1, 262,
-       24, 1, 879
-};
 static int parser_action_row1579[] = {
        2,
-       -1, 1, 189,
-       24, 1, 864
+       -1, 3, 1578,
+       9, 0, 1649
 };
 static int parser_action_row1580[] = {
-       2,
-       -1, 1, 179,
-       24, 1, 854
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1581[] = {
-       1,
-       -1, 1, 273
+       2,
+       -1, 3, 1580,
+       96, 0, 1324
 };
 static int parser_action_row1582[] = {
-       2,
-       -1, 1, 384,
-       87, 0, 185
+       1,
+       -1, 1, 1061
 };
 static int parser_action_row1583[] = {
-       1,
-       -1, 1, 370
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row1584[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1583,
+       57, 0, 829
 };
 static int parser_action_row1585[] = {
        3,
-       -1, 1, 558,
-       52, 0, 253,
-       58, 0, 196
+       -1, 3, 1584,
+       14, 0, 1654,
+       15, 0, 1655
 };
 static int parser_action_row1586[] = {
-       2,
-       -1, 3, 1585,
-       89, 0, 1646
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row1587[] = {
-       3,
-       -1, 3, 1586,
-       88, 0, 48,
-       89, 0, 1647
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row1588[] = {
-       3,
-       -1, 1, 530,
-       68, 1, 533,
-       70, 1, 533
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 1659
 };
 static int parser_action_row1589[] = {
-       1,
-       -1, 1, 493
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row1590[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1589,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1591[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 1590,
+       57, 0, 1665
 };
 static int parser_action_row1592[] = {
-       1,
-       -1, 1, 539
+       2,
+       -1, 3, 1591,
+       53, 0, 1666
 };
 static int parser_action_row1593[] = {
        1,
-       -1, 1, 547
+       -1, 1, 671
 };
 static int parser_action_row1594[] = {
-       2,
-       -1, 1, 545,
-       52, 0, 253
+       1,
+       -1, 1, 690
 };
 static int parser_action_row1595[] = {
-       3,
+       24,
        -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1596[] = {
-       3,
-       -1, 3, 1595,
-       0, 0, 83,
-       1, 0, 84
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1597[] = {
-       1,
-       -1, 1, 396
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1598[] = {
-       3,
-       -1, 3, 1597,
-       0, 0, 83,
-       1, 0, 84
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1599[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1600[] = {
-       2,
-       -1, 1, 129,
-       88, 0, 559
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1601[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       13,
+       -1, 1, 757,
+       59, 0, 1673,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1602[] = {
-       1,
-       -1, 1, 127
+       25,
+       -1, 1, 458,
+       12, 0, 730,
+       46, 0, 731,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1675
 };
 static int parser_action_row1603[] = {
-       4,
-       -1, 1, 118,
-       4, 0, 918,
-       14, 0, 919,
-       15, 0, 1657
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1604[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 910
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1605[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1606[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1607[] = {
-       2,
-       -1, 3, 1606,
-       15, 0, 1665
+       13,
+       -1, 1, 761,
+       59, 0, 1684,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1608[] = {
-       3,
-       -1, 3, 1607,
-       14, 0, 1604,
-       15, 0, 1666
+       14,
+       -1, 1, 760,
+       52, 0, 277,
+       59, 0, 1686,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1609[] = {
-       4,
-       -1, 1, 76,
-       14, 0, 1668,
-       15, 0, 1669,
-       59, 0, 1670
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1610[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 363
 };
 static int parser_action_row1611[] = {
-       3,
-       -1, 1, 118,
-       4, 0, 918,
-       15, 0, 1674
+       22,
+       -1, 1, 458,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1612[] = {
        3,
-       -1, 3, 1611,
-       28, 0, 33,
-       101, 0, 56
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1613[] = {
        1,
-       -1, 1, 49
+       -1, 1, 778
 };
 static int parser_action_row1614[] = {
-       4,
-       -1, 1, 118,
-       4, 0, 918,
-       14, 0, 919,
-       15, 0, 1677
+       2,
+       -1, 3, 1613,
+       24, 0, 1692
 };
 static int parser_action_row1615[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 910
+       1,
+       -1, 1, 938
 };
 static int parser_action_row1616[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1615,
+       49, 0, 197
 };
 static int parser_action_row1617[] = {
-       2,
-       -1, 1, 403,
-       87, 0, 185
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1618[] = {
        1,
-       -1, 1, 628
+       -1, 1, 942
 };
 static int parser_action_row1619[] = {
-       1,
-       -1, 1, 647
+       2,
+       -1, 3, 1618,
+       49, 0, 197
 };
 static int parser_action_row1620[] = {
-       1,
-       -1, 1, 619
+       2,
+       -1, 1, 194,
+       24, 1, 925
 };
 static int parser_action_row1621[] = {
-       1,
-       -1, 1, 638
+       2,
+       -1, 1, 184,
+       24, 1, 915
 };
 static int parser_action_row1622[] = {
-       1,
-       -1, 1, 631
+       2,
+       -1, 1, 196,
+       24, 1, 927
 };
 static int parser_action_row1623[] = {
-       1,
-       -1, 1, 650
+       2,
+       -1, 1, 186,
+       24, 1, 917
 };
 static int parser_action_row1624[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1625[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 337,
+       59, 0, 1187,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 337,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1626[] = {
-       12,
-       -1, 1, 698,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 1686,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 271
 };
 static int parser_action_row1627[] = {
-       2,
-       -1, 3, 1626,
-       90, 0, 1689
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1628[] = {
-       18,
-       -1, 1, 437,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 1690
+       2,
+       -1, 3, 1627,
+       53, 0, 1699
 };
 static int parser_action_row1629[] = {
        1,
-       -1, 1, 753
+       -1, 1, 407
 };
 static int parser_action_row1630[] = {
-       19,
-       -1, 1, 439,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       88, 0, 48,
-       89, 0, 1691
+       1,
+       -1, 1, 427
 };
 static int parser_action_row1631[] = {
-       1,
-       -1, 1, 636
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1632[] = {
-       1,
-       -1, 1, 655
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1633[] = {
        1,
-       -1, 1, 635
+       -1, 1, 808
 };
 static int parser_action_row1634[] = {
-       1,
-       -1, 1, 654
+       3,
+       -1, 3, 1633,
+       96, 0, 53,
+       97, 0, 1702
 };
 static int parser_action_row1635[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1634,
+       98, 0, 1705
 };
 static int parser_action_row1636[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 531
 };
 static int parser_action_row1637[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1638[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 524
 };
 static int parser_action_row1639[] = {
-       10,
-       -1, 1, 709,
-       59, 0, 1697,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 593
 };
 static int parser_action_row1640[] = {
-       1,
-       -1, 1, 345
+       3,
+       -1, 3, 1639,
+       31, 0, 1707,
+       52, 0, 1708
 };
 static int parser_action_row1641[] = {
        1,
-       -1, 1, 729
+       -1, 1, 575
 };
 static int parser_action_row1642[] = {
        1,
-       -1, 1, 872
+       -1, 1, 573
 };
 static int parser_action_row1643[] = {
        2,
-       -1, 3, 1642,
-       15, 0, 1699
+       -1, 1, 581,
+       52, 0, 277
 };
 static int parser_action_row1644[] = {
-       1,
-       -1, 1, 391
+       3,
+       -1, 1, 589,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1645[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 456,
+       97, 0, 1711
 };
 static int parser_action_row1646[] = {
-       1,
-       -1, 1, 557
+       57,
+       -1, 1, 458,
+       0, 0, 88,
+       1, 0, 89,
+       12, 0, 116,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 117,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 118,
+       33, 0, 1329,
+       34, 0, 1330,
+       35, 0, 1331,
+       36, 0, 1332,
+       37, 0, 43,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       47, 0, 396,
+       48, 0, 125,
+       50, 0, 49,
+       51, 0, 1333,
+       52, 0, 1712,
+       54, 0, 619,
+       74, 0, 1335,
+       75, 0, 1336,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 1337,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       95, 0, 90,
+       96, 0, 424,
+       97, 0, 1338,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1647[] = {
-       2,
-       -1, 1, 560,
-       52, 0, 253
+       1,
+       -1, 1, 125
 };
 static int parser_action_row1648[] = {
-       3,
-       -1, 1, 564,
-       52, 0, 253,
-       58, 0, 196
+       5,
+       -1, 3, 1647,
+       31, 0, 1716,
+       47, 0, 1717,
+       52, 0, 1718,
+       96, 0, 397
 };
 static int parser_action_row1649[] = {
-       2,
-       -1, 3, 1648,
-       89, 0, 1703
+       1,
+       -1, 1, 42
 };
 static int parser_action_row1650[] = {
-       2,
-       -1, 3, 1649,
-       45, 0, 1704
+       1,
+       -1, 1, 28
 };
 static int parser_action_row1651[] = {
-       4,
+       2,
        -1, 3, 1650,
-       31, 0, 1705,
-       47, 0, 365,
-       88, 0, 366
+       9, 0, 1720
 };
 static int parser_action_row1652[] = {
        1,
-       -1, 1, 543
+       -1, 1, 40
 };
 static int parser_action_row1653[] = {
-       50,
-       -1, 1, 440,
-       12, 0, 156,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 157,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 158,
-       33, 0, 368,
-       34, 0, 369,
-       35, 0, 370,
-       36, 0, 371,
-       37, 0, 38,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 365,
-       48, 0, 161,
-       50, 0, 44,
-       51, 0, 372,
-       52, 0, 46,
-       54, 0, 373,
-       71, 0, 374,
-       72, 0, 375,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       87, 0, 185,
-       88, 0, 389,
-       89, 0, 390,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 1721
 };
 static int parser_action_row1654[] = {
-       1,
-       -1, 1, 397
+       2,
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row1655[] = {
-       1,
-       -1, 1, 400
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row1656[] = {
-       2,
-       -1, 3, 1655,
-       47, 0, 1708
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1657[] = {
-       4,
+       2,
        -1, 3, 1656,
-       31, 0, 1709,
-       47, 0, 1710,
-       88, 0, 366
+       15, 0, 1729
 };
 static int parser_action_row1658[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 1657,
+       14, 0, 1654,
+       15, 0, 1730
 };
 static int parser_action_row1659[] = {
-       3,
-       -1, 1, 118,
-       4, 0, 918,
-       15, 0, 1713
+       4,
+       -1, 1, 78,
+       14, 0, 1732,
+       15, 0, 1733,
+       59, 0, 1734
 };
 static int parser_action_row1660[] = {
-       3,
-       -1, 3, 1659,
-       28, 0, 33,
-       101, 0, 56
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1661[] = {
-       1,
-       -1, 1, 48
+       3,
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1738
 };
 static int parser_action_row1662[] = {
-       1,
-       -1, 1, 67
+       3,
+       -1, 3, 1661,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1663[] = {
        1,
-       -1, 1, 77
+       -1, 1, 51
 };
 static int parser_action_row1664[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 1741
 };
 static int parser_action_row1665[] = {
        2,
-       -1, 1, 451,
-       9, 0, 1241
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row1666[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1667[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 422,
+       94, 0, 204
 };
 static int parser_action_row1668[] = {
-       2,
-       -1, 3, 1667,
-       15, 0, 1720
+       1,
+       -1, 1, 670
 };
 static int parser_action_row1669[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       1,
+       -1, 1, 689
 };
 static int parser_action_row1670[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 661
 };
 static int parser_action_row1671[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 680
 };
 static int parser_action_row1672[] = {
        1,
-       -1, 1, 57
+       -1, 1, 673
 };
 static int parser_action_row1673[] = {
-       2,
-       -1, 3, 1672,
-       15, 0, 1725
+       1,
+       -1, 1, 692
 };
 static int parser_action_row1674[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1675[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1676[] = {
-       3,
-       -1, 3, 1675,
-       28, 0, 33,
-       101, 0, 56
+       15,
+       -1, 1, 748,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1750,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1677[] = {
-       1,
-       -1, 1, 68
+       2,
+       -1, 3, 1676,
+       98, 0, 1753
 };
 static int parser_action_row1678[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1754
 };
 static int parser_action_row1679[] = {
-       3,
-       -1, 1, 118,
-       4, 0, 918,
-       15, 0, 1730
+       1,
+       -1, 1, 805
 };
 static int parser_action_row1680[] = {
-       3,
-       -1, 3, 1679,
-       28, 0, 33,
-       101, 0, 56
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1755
 };
 static int parser_action_row1681[] = {
        1,
-       -1, 1, 50
+       -1, 1, 678
 };
 static int parser_action_row1682[] = {
        1,
-       -1, 1, 41
+       -1, 1, 697
 };
 static int parser_action_row1683[] = {
        1,
-       -1, 1, 954
+       -1, 1, 677
 };
 static int parser_action_row1684[] = {
        1,
-       -1, 1, 404
+       -1, 1, 696
 };
 static int parser_action_row1685[] = {
-       1,
-       -1, 1, 630
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1686[] = {
-       1,
-       -1, 1, 649
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1687[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1688[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1689[] = {
-       10,
-       -1, 1, 697,
-       59, 0, 1735,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       13,
+       -1, 1, 759,
+       59, 0, 1761,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1690[] = {
-       10,
-       -1, 1, 695,
-       59, 0, 1737,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       2,
+       -1, 3, 1689,
+       53, 0, 1763
 };
 static int parser_action_row1691[] = {
-       11,
-       -1, 1, 700,
-       52, 0, 253,
-       59, 0, 1739,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 699
 };
 static int parser_action_row1692[] = {
-       12,
-       -1, 1, 704,
-       52, 0, 253,
-       58, 0, 196,
-       59, 0, 1742,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       2,
+       -1, 3, 1691,
+       53, 0, 1764
 };
 static int parser_action_row1693[] = {
-       18,
-       -1, 1, 438,
-       54, 0, 575,
-       71, 0, 576,
-       72, 0, 577,
-       73, 0, 376,
-       74, 0, 377,
-       75, 0, 378,
-       76, 0, 379,
-       77, 0, 380,
-       78, 0, 381,
-       79, 0, 382,
-       80, 0, 383,
-       81, 0, 384,
-       82, 0, 385,
-       83, 0, 386,
-       84, 0, 387,
-       85, 0, 388,
-       89, 0, 1745
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1381,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1694[] = {
-       1,
-       -1, 1, 634
+       2,
+       -1, 1, 269,
+       24, 1, 937
 };
 static int parser_action_row1695[] = {
-       1,
-       -1, 1, 653
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1696[] = {
-       1,
-       -1, 1, 633
+       2,
+       -1, 1, 273,
+       24, 1, 941
 };
 static int parser_action_row1697[] = {
-       1,
-       -1, 1, 652
+       2,
+       -1, 1, 195,
+       24, 1, 926
 };
 static int parser_action_row1698[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 185,
+       24, 1, 916
 };
 static int parser_action_row1699[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 284
 };
 static int parser_action_row1700[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 968,
-       12, 0, 828,
-       15, 0, 829,
-       16, 0, 28,
-       22, 0, 830,
-       25, 0, 832,
-       26, 0, 833,
-       27, 0, 834,
-       33, 0, 835,
-       34, 0, 836,
-       35, 0, 837,
-       36, 0, 838,
-       37, 0, 839,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 840,
-       51, 0, 841,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 842,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1701[] = {
-       2,
-       -1, 3, 1700,
-       24, 0, 1750
+       1,
+       -1, 1, 391
 };
 static int parser_action_row1702[] = {
-       1,
-       -1, 1, 559
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1703[] = {
-       1,
-       -1, 1, 563
+       3,
+       -1, 1, 598,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1704[] = {
        2,
-       -1, 1, 562,
-       52, 0, 253
+       -1, 3, 1703,
+       97, 0, 1770
 };
 static int parser_action_row1705[] = {
-       1,
-       -1, 1, 567
+       3,
+       -1, 3, 1704,
+       96, 0, 53,
+       97, 0, 1771
 };
 static int parser_action_row1706[] = {
+       2,
+       -1, 1, 570,
+       73, 1, 573
+};
+static int parser_action_row1707[] = {
+       1,
+       -1, 1, 525
+};
+static int parser_action_row1708[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1707[] = {
+static int parser_action_row1709[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1708[] = {
-       2,
-       -1, 3, 1707,
-       53, 0, 1754
+static int parser_action_row1710[] = {
+       1,
+       -1, 1, 579
 };
-static int parser_action_row1709[] = {
+static int parser_action_row1711[] = {
        1,
-       -1, 1, 131
+       -1, 1, 587
 };
-static int parser_action_row1710[] = {
+static int parser_action_row1712[] = {
+       2,
+       -1, 1, 585,
+       52, 0, 277
+};
+static int parser_action_row1713[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1711[] = {
+static int parser_action_row1714[] = {
        4,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2,
-       88, 0, 559
-};
-static int parser_action_row1712[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1713[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
-};
-static int parser_action_row1714[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       -1, 3, 1713,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row1715[] = {
-       3,
-       -1, 3, 1714,
-       28, 0, 33,
-       101, 0, 56
+       1,
+       -1, 1, 415
 };
 static int parser_action_row1716[] = {
-       1,
-       -1, 1, 55
+       4,
+       -1, 3, 1715,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row1717[] = {
-       1,
-       -1, 1, 78
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1718[] = {
-       1,
-       -1, 1, 63
+       2,
+       -1, 1, 135,
+       96, 0, 603
 };
 static int parser_action_row1719[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1720[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       1,
+       -1, 1, 133
 };
 static int parser_action_row1721[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 29
 };
 static int parser_action_row1722[] = {
-       2,
-       -1, 1, 74,
-       15, 1, 77
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1723[] = {
        3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1782
 };
 static int parser_action_row1724[] = {
-       2,
-       -1, 1, 59,
-       9, 0, 1765
+       3,
+       -1, 3, 1723,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1725[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 50
 };
 static int parser_action_row1726[] = {
-       33,
-       -1, 1, 440,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 69
 };
 static int parser_action_row1727[] = {
        1,
-       -1, 1, 51
+       -1, 1, 79
 };
 static int parser_action_row1728[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1729[] = {
-       1,
-       -1, 1, 70
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1730[] = {
-       2,
-       -1, 1, 451,
-       9, 0, 1241
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1731[] = {
-       33,
-       -1, 1, 440,
+       34,
+       -1, 1, 458,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 545,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       88, 0, 48,
-       89, 0, 49,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1732[] = {
-       3,
+       2,
        -1, 3, 1731,
-       28, 0, 33,
-       101, 0, 56
+       15, 0, 1789
 };
 static int parser_action_row1733[] = {
-       1,
-       -1, 1, 69
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row1734[] = {
-       1,
-       -1, 1, 621
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1735[] = {
-       1,
-       -1, 1, 640
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1736[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 59
 };
 static int parser_action_row1737[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 3, 1736,
+       15, 0, 1794
 };
 static int parser_action_row1738[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1739[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1740[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 1739,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1741[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       1,
+       -1, 1, 70
 };
 static int parser_action_row1742[] = {
-       10,
-       -1, 1, 699,
-       59, 0, 1778,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1743[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1799
 };
 static int parser_action_row1744[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       3,
+       -1, 3, 1743,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1745[] = {
-       10,
-       -1, 1, 703,
-       59, 0, 1782,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 52
 };
 static int parser_action_row1746[] = {
-       11,
-       -1, 1, 702,
-       52, 0, 253,
-       59, 0, 1784,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       1,
+       -1, 1, 43
 };
 static int parser_action_row1747[] = {
        1,
-       -1, 1, 632
+       -1, 1, 1016
 };
 static int parser_action_row1748[] = {
        1,
-       -1, 1, 651
+       -1, 1, 423
 };
 static int parser_action_row1749[] = {
        1,
-       -1, 1, 878
+       -1, 1, 672
 };
 static int parser_action_row1750[] = {
-       2,
-       -1, 3, 1749,
-       49, 0, 178
+       1,
+       -1, 1, 691
 };
 static int parser_action_row1751[] = {
-       3,
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1752[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1753[] = {
+       13,
+       -1, 1, 747,
+       59, 0, 1804,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1754[] = {
+       13,
+       -1, 1, 745,
+       59, 0, 1806,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1755[] = {
+       14,
+       -1, 1, 750,
+       52, 0, 277,
+       59, 0, 1808,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1756[] = {
+       15,
+       -1, 1, 754,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1811,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1757[] = {
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1814
+};
+static int parser_action_row1758[] = {
+       1,
+       -1, 1, 676
+};
+static int parser_action_row1759[] = {
+       1,
+       -1, 1, 695
+};
+static int parser_action_row1760[] = {
+       1,
+       -1, 1, 675
+};
+static int parser_action_row1761[] = {
+       1,
+       -1, 1, 694
+};
+static int parser_action_row1762[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1763[] = {
+       24,
        -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1764[] = {
+       1,
+       -1, 1, 364
+};
+static int parser_action_row1765[] = {
+       1,
+       -1, 1, 779
+};
+static int parser_action_row1766[] = {
+       1,
+       -1, 1, 934
+};
+static int parser_action_row1767[] = {
+       2,
+       -1, 3, 1766,
+       15, 0, 1817
+};
+static int parser_action_row1768[] = {
+       1,
+       -1, 1, 411
+};
+static int parser_action_row1769[] = {
+       3,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1752[] = {
+static int parser_action_row1770[] = {
        1,
-       -1, 1, 561
+       -1, 1, 597
 };
-static int parser_action_row1753[] = {
+static int parser_action_row1771[] = {
+       2,
+       -1, 1, 600,
+       52, 0, 277
+};
+static int parser_action_row1772[] = {
+       3,
+       -1, 1, 604,
+       52, 0, 277,
+       58, 0, 215
+};
+static int parser_action_row1773[] = {
+       2,
+       -1, 3, 1772,
+       97, 0, 1821
+};
+static int parser_action_row1774[] = {
+       2,
+       -1, 3, 1773,
+       45, 0, 1822
+};
+static int parser_action_row1775[] = {
+       4,
+       -1, 3, 1774,
+       31, 0, 1823,
+       47, 0, 396,
+       96, 0, 397
+};
+static int parser_action_row1776[] = {
+       1,
+       -1, 1, 583
+};
+static int parser_action_row1777[] = {
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1778[] = {
+       1,
+       -1, 1, 416
+};
+static int parser_action_row1779[] = {
+       1,
+       -1, 1, 419
+};
+static int parser_action_row1780[] = {
+       2,
+       -1, 3, 1779,
+       47, 0, 1826
+};
+static int parser_action_row1781[] = {
+       4,
+       -1, 3, 1780,
+       31, 0, 1827,
+       47, 0, 1828,
+       96, 0, 397
+};
+static int parser_action_row1782[] = {
        2,
-       -1, 3, 1752,
-       45, 0, 1789
+       -1, 1, 469,
+       9, 0, 1320
+};
+static int parser_action_row1783[] = {
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1784[] = {
+       3,
+       -1, 3, 1783,
+       28, 0, 84,
+       109, 0, 85
+};
+static int parser_action_row1785[] = {
+       1,
+       -1, 1, 57
+};
+static int parser_action_row1786[] = {
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       15, 1, 80,
+       95, 0, 3
+};
+static int parser_action_row1787[] = {
+       1,
+       -1, 1, 65
+};
+static int parser_action_row1788[] = {
+       2,
+       -1, 1, 469,
+       9, 0, 1320
+};
+static int parser_action_row1789[] = {
+       2,
+       -1, 1, 469,
+       9, 0, 1320
+};
+static int parser_action_row1790[] = {
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1791[] = {
+       2,
+       -1, 1, 76,
+       15, 1, 79
+};
+static int parser_action_row1792[] = {
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
+};
+static int parser_action_row1793[] = {
+       2,
+       -1, 1, 61,
+       9, 0, 1837
+};
+static int parser_action_row1794[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1795[] = {
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1796[] = {
+       1,
+       -1, 1, 53
+};
+static int parser_action_row1797[] = {
+       2,
+       -1, 1, 469,
+       9, 0, 1320
+};
+static int parser_action_row1798[] = {
+       1,
+       -1, 1, 72
+};
+static int parser_action_row1799[] = {
+       2,
+       -1, 1, 469,
+       9, 0, 1320
+};
+static int parser_action_row1800[] = {
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1801[] = {
+       3,
+       -1, 3, 1800,
+       28, 0, 84,
+       109, 0, 85
+};
+static int parser_action_row1802[] = {
+       1,
+       -1, 1, 71
+};
+static int parser_action_row1803[] = {
+       1,
+       -1, 1, 663
+};
+static int parser_action_row1804[] = {
+       1,
+       -1, 1, 682
+};
+static int parser_action_row1805[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1806[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1807[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1808[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1809[] = {
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1810[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1811[] = {
+       13,
+       -1, 1, 749,
+       59, 0, 1850,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1812[] = {
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1813[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1814[] = {
+       13,
+       -1, 1, 753,
+       59, 0, 1854,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1815[] = {
+       14,
+       -1, 1, 752,
+       52, 0, 277,
+       59, 0, 1856,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1816[] = {
+       1,
+       -1, 1, 674
+};
+static int parser_action_row1817[] = {
+       1,
+       -1, 1, 693
+};
+static int parser_action_row1818[] = {
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1819[] = {
+       2,
+       -1, 3, 1818,
+       24, 0, 1861
+};
+static int parser_action_row1820[] = {
+       1,
+       -1, 1, 599
+};
+static int parser_action_row1821[] = {
+       1,
+       -1, 1, 603
+};
+static int parser_action_row1822[] = {
+       2,
+       -1, 1, 602,
+       52, 0, 277
+};
+static int parser_action_row1823[] = {
+       1,
+       -1, 1, 607
+};
+static int parser_action_row1824[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1754[] = {
+static int parser_action_row1825[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1826[] = {
        2,
-       -1, 3, 1753,
-       53, 0, 1790
+       -1, 3, 1825,
+       53, 0, 1865
 };
-static int parser_action_row1755[] = {
-       4,
-       -1, 3, 1754,
-       0, 0, 83,
-       1, 0, 84,
-       87, 0, 185
+static int parser_action_row1827[] = {
+       1,
+       -1, 1, 137
 };
-static int parser_action_row1756[] = {
-       2,
-       -1, 3, 1755,
-       47, 0, 1793
+static int parser_action_row1828[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1757[] = {
-       2,
-       -1, 3, 1756,
-       53, 0, 1794
+static int parser_action_row1829[] = {
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       96, 0, 603
 };
-static int parser_action_row1758[] = {
-       2,
-       -1, 3, 1757,
-       53, 0, 1795
+static int parser_action_row1830[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1759[] = {
+static int parser_action_row1831[] = {
        1,
-       -1, 1, 46
+       -1, 1, 48
 };
-static int parser_action_row1760[] = {
+static int parser_action_row1832[] = {
        2,
-       -1, 1, 451,
-       9, 0, 1241
+       -1, 1, 469,
+       9, 0, 1320
 };
-static int parser_action_row1761[] = {
+static int parser_action_row1833[] = {
        1,
-       -1, 1, 56
+       -1, 1, 58
 };
-static int parser_action_row1762[] = {
+static int parser_action_row1834[] = {
        1,
-       -1, 1, 65
+       -1, 1, 67
 };
-static int parser_action_row1763[] = {
+static int parser_action_row1835[] = {
        1,
-       -1, 1, 64
+       -1, 1, 66
 };
-static int parser_action_row1764[] = {
+static int parser_action_row1836[] = {
        2,
-       -1, 1, 451,
-       9, 0, 1241
+       -1, 1, 469,
+       9, 0, 1320
 };
-static int parser_action_row1765[] = {
-       2,
-       -1, 1, 78,
-       9, 0, 1345
+static int parser_action_row1837[] = {
+       6,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1451,
+       15, 1, 80,
+       95, 0, 3
 };
-static int parser_action_row1766[] = {
+static int parser_action_row1838[] = {
        1,
-       -1, 1, 61
+       -1, 1, 63
 };
-static int parser_action_row1767[] = {
+static int parser_action_row1839[] = {
        2,
-       -1, 1, 76,
-       14, 0, 910
+       -1, 1, 78,
+       14, 0, 969
 };
-static int parser_action_row1768[] = {
+static int parser_action_row1840[] = {
        2,
-       -1, 1, 60,
-       9, 0, 1799
+       -1, 1, 62,
+       9, 0, 1872
 };
-static int parser_action_row1769[] = {
+static int parser_action_row1841[] = {
        1,
-       -1, 1, 53
+       -1, 1, 55
 };
-static int parser_action_row1770[] = {
+static int parser_action_row1842[] = {
        1,
-       -1, 1, 52
+       -1, 1, 54
 };
-static int parser_action_row1771[] = {
+static int parser_action_row1843[] = {
        2,
-       -1, 1, 451,
-       9, 0, 1241
+       -1, 1, 469,
+       9, 0, 1320
 };
-static int parser_action_row1772[] = {
+static int parser_action_row1844[] = {
        1,
-       -1, 1, 71
+       -1, 1, 73
 };
-static int parser_action_row1773[] = {
+static int parser_action_row1845[] = {
        1,
-       -1, 1, 620
+       -1, 1, 662
 };
-static int parser_action_row1774[] = {
+static int parser_action_row1846[] = {
        1,
-       -1, 1, 639
+       -1, 1, 681
 };
-static int parser_action_row1775[] = {
+static int parser_action_row1847[] = {
        1,
-       -1, 1, 618
+       -1, 1, 660
 };
-static int parser_action_row1776[] = {
+static int parser_action_row1848[] = {
        1,
-       -1, 1, 637
+       -1, 1, 679
 };
-static int parser_action_row1777[] = {
+static int parser_action_row1849[] = {
        1,
-       -1, 1, 623
+       -1, 1, 665
 };
-static int parser_action_row1778[] = {
+static int parser_action_row1850[] = {
        1,
-       -1, 1, 642
-};
-static int parser_action_row1779[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row1780[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+       -1, 1, 684
 };
-static int parser_action_row1781[] = {
+static int parser_action_row1851[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1852[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1853[] = {
+       1,
+       -1, 1, 669
+};
+static int parser_action_row1854[] = {
        1,
-       -1, 1, 627
+       -1, 1, 688
 };
-static int parser_action_row1782[] = {
+static int parser_action_row1855[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1856[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1857[] = {
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1858[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1859[] = {
+       13,
+       -1, 1, 751,
+       59, 0, 1880,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
+};
+static int parser_action_row1860[] = {
        1,
-       -1, 1, 646
-};
-static int parser_action_row1783[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row1784[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row1785[] = {
-       25,
-       -1, 1, 486,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       41, 1, 440,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       90, 1, 440,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row1786[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
-};
-static int parser_action_row1787[] = {
-       10,
-       -1, 1, 701,
-       59, 0, 1807,
-       60, 0, 198,
-       61, 0, 199,
-       62, 0, 200,
-       63, 0, 201,
-       64, 0, 202,
-       65, 0, 203,
-       66, 0, 204,
-       67, 0, 205
+       -1, 1, 940
 };
-static int parser_action_row1788[] = {
+static int parser_action_row1861[] = {
        2,
-       -1, 1, 260,
-       24, 1, 877
-};
-static int parser_action_row1789[] = {
-       22,
-       -1, 1, 440,
-       12, 0, 1034,
-       22, 0, 1035,
-       31, 0, 1036,
-       38, 0, 1037,
-       40, 0, 1038,
-       42, 0, 1039,
-       43, 0, 1040,
-       44, 0, 1041,
-       45, 0, 1042,
-       48, 0, 1043,
-       52, 0, 46,
-       71, 0, 1044,
-       72, 0, 1045,
-       88, 0, 48,
-       89, 0, 1046,
-       91, 0, 1047,
-       92, 0, 1048,
-       93, 0, 1049,
-       94, 0, 1050,
-       95, 0, 54,
-       98, 0, 1051
+       -1, 3, 1860,
+       49, 0, 197
 };
-static int parser_action_row1790[] = {
+static int parser_action_row1862[] = {
        3,
-       -1, 1, 458,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1791[] = {
+static int parser_action_row1863[] = {
        1,
-       -1, 1, 565
+       -1, 1, 601
 };
-static int parser_action_row1792[] = {
-       3,
-       -1, 3, 1791,
-       0, 0, 83,
-       1, 0, 84
+static int parser_action_row1864[] = {
+       2,
+       -1, 3, 1863,
+       45, 0, 1884
 };
-static int parser_action_row1793[] = {
-       1,
-       -1, 1, 398
+static int parser_action_row1865[] = {
+       2,
+       -1, 3, 1864,
+       53, 0, 1885
 };
-static int parser_action_row1794[] = {
-       3,
-       -1, 1, 458,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1866[] = {
+       5,
+       -1, 3, 1865,
+       0, 0, 88,
+       1, 0, 89,
+       94, 0, 204,
+       95, 0, 90
 };
-static int parser_action_row1795[] = {
+static int parser_action_row1867[] = {
+       2,
+       -1, 3, 1866,
+       47, 0, 1888
+};
+static int parser_action_row1868[] = {
+       2,
+       -1, 3, 1867,
+       53, 0, 1889
+};
+static int parser_action_row1869[] = {
+       2,
+       -1, 3, 1868,
+       53, 0, 1890
+};
+static int parser_action_row1870[] = {
        1,
-       -1, 1, 128
+       -1, 1, 49
 };
-static int parser_action_row1796[] = {
+static int parser_action_row1871[] = {
        1,
-       -1, 1, 126
+       -1, 1, 68
 };
-static int parser_action_row1797[] = {
+static int parser_action_row1872[] = {
        1,
-       -1, 1, 47
+       -1, 1, 60
 };
-static int parser_action_row1798[] = {
+static int parser_action_row1873[] = {
        1,
-       -1, 1, 66
+       -1, 1, 64
 };
-static int parser_action_row1799[] = {
+static int parser_action_row1874[] = {
        1,
-       -1, 1, 58
+       -1, 1, 56
 };
-static int parser_action_row1800[] = {
+static int parser_action_row1875[] = {
        1,
-       -1, 1, 62
+       -1, 1, 664
 };
-static int parser_action_row1801[] = {
+static int parser_action_row1876[] = {
        1,
-       -1, 1, 54
+       -1, 1, 683
 };
-static int parser_action_row1802[] = {
+static int parser_action_row1877[] = {
        1,
-       -1, 1, 622
+       -1, 1, 668
 };
-static int parser_action_row1803[] = {
+static int parser_action_row1878[] = {
        1,
-       -1, 1, 641
+       -1, 1, 687
 };
-static int parser_action_row1804[] = {
+static int parser_action_row1879[] = {
        1,
-       -1, 1, 626
+       -1, 1, 667
 };
-static int parser_action_row1805[] = {
+static int parser_action_row1880[] = {
        1,
-       -1, 1, 645
+       -1, 1, 686
 };
-static int parser_action_row1806[] = {
+static int parser_action_row1881[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1882[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1883[] = {
+       2,
+       -1, 1, 271,
+       24, 1, 939
+};
+static int parser_action_row1884[] = {
+       23,
+       -1, 1, 458,
+       12, 0, 1102,
+       22, 0, 1103,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
+};
+static int parser_action_row1885[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1886[] = {
        1,
-       -1, 1, 625
+       -1, 1, 605
 };
-static int parser_action_row1807[] = {
+static int parser_action_row1887[] = {
+       4,
+       -1, 3, 1886,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
+};
+static int parser_action_row1888[] = {
        1,
-       -1, 1, 644
+       -1, 1, 417
 };
-static int parser_action_row1808[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+static int parser_action_row1889[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1809[] = {
-       23,
-       -1, 1, 440,
-       12, 0, 156,
-       22, 0, 157,
-       31, 0, 158,
-       38, 0, 159,
-       40, 0, 160,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 161,
-       52, 0, 46,
-       54, 0, 47,
-       71, 0, 162,
-       72, 0, 163,
-       88, 0, 48,
-       89, 0, 164,
-       91, 0, 50,
-       92, 0, 51,
-       93, 0, 52,
-       94, 0, 53,
-       95, 0, 54,
-       98, 0, 55
+static int parser_action_row1890[] = {
+       1,
+       -1, 1, 134
 };
-static int parser_action_row1810[] = {
+static int parser_action_row1891[] = {
        1,
-       -1, 1, 495
+       -1, 1, 132
 };
-static int parser_action_row1811[] = {
-       2,
-       -1, 3, 1810,
-       53, 0, 1815
+static int parser_action_row1892[] = {
+       1,
+       -1, 1, 666
 };
-static int parser_action_row1812[] = {
+static int parser_action_row1893[] = {
+       1,
+       -1, 1, 685
+};
+static int parser_action_row1894[] = {
        1,
-       -1, 1, 399
+       -1, 1, 527
 };
-static int parser_action_row1813[] = {
+static int parser_action_row1895[] = {
        2,
-       -1, 3, 1812,
-       53, 0, 1816
+       -1, 3, 1894,
+       53, 0, 1897
 };
-static int parser_action_row1814[] = {
+static int parser_action_row1896[] = {
        1,
-       -1, 1, 624
+       -1, 1, 418
 };
-static int parser_action_row1815[] = {
-       1,
-       -1, 1, 643
+static int parser_action_row1897[] = {
+       2,
+       -1, 3, 1896,
+       53, 0, 1898
 };
-static int parser_action_row1816[] = {
+static int parser_action_row1898[] = {
        1,
-       -1, 1, 566
+       -1, 1, 606
 };
-static int parser_action_row1817[] = {
+static int parser_action_row1899[] = {
        1,
-       -1, 1, 130
+       -1, 1, 136
 };
 
 const int* const parser_action_table[] = {
@@ -21023,200 +22386,283 @@ const int* const parser_action_table[] = {
        parser_action_row1814,
        parser_action_row1815,
        parser_action_row1816,
-       parser_action_row1817
+       parser_action_row1817,
+       parser_action_row1818,
+       parser_action_row1819,
+       parser_action_row1820,
+       parser_action_row1821,
+       parser_action_row1822,
+       parser_action_row1823,
+       parser_action_row1824,
+       parser_action_row1825,
+       parser_action_row1826,
+       parser_action_row1827,
+       parser_action_row1828,
+       parser_action_row1829,
+       parser_action_row1830,
+       parser_action_row1831,
+       parser_action_row1832,
+       parser_action_row1833,
+       parser_action_row1834,
+       parser_action_row1835,
+       parser_action_row1836,
+       parser_action_row1837,
+       parser_action_row1838,
+       parser_action_row1839,
+       parser_action_row1840,
+       parser_action_row1841,
+       parser_action_row1842,
+       parser_action_row1843,
+       parser_action_row1844,
+       parser_action_row1845,
+       parser_action_row1846,
+       parser_action_row1847,
+       parser_action_row1848,
+       parser_action_row1849,
+       parser_action_row1850,
+       parser_action_row1851,
+       parser_action_row1852,
+       parser_action_row1853,
+       parser_action_row1854,
+       parser_action_row1855,
+       parser_action_row1856,
+       parser_action_row1857,
+       parser_action_row1858,
+       parser_action_row1859,
+       parser_action_row1860,
+       parser_action_row1861,
+       parser_action_row1862,
+       parser_action_row1863,
+       parser_action_row1864,
+       parser_action_row1865,
+       parser_action_row1866,
+       parser_action_row1867,
+       parser_action_row1868,
+       parser_action_row1869,
+       parser_action_row1870,
+       parser_action_row1871,
+       parser_action_row1872,
+       parser_action_row1873,
+       parser_action_row1874,
+       parser_action_row1875,
+       parser_action_row1876,
+       parser_action_row1877,
+       parser_action_row1878,
+       parser_action_row1879,
+       parser_action_row1880,
+       parser_action_row1881,
+       parser_action_row1882,
+       parser_action_row1883,
+       parser_action_row1884,
+       parser_action_row1885,
+       parser_action_row1886,
+       parser_action_row1887,
+       parser_action_row1888,
+       parser_action_row1889,
+       parser_action_row1890,
+       parser_action_row1891,
+       parser_action_row1892,
+       parser_action_row1893,
+       parser_action_row1894,
+       parser_action_row1895,
+       parser_action_row1896,
+       parser_action_row1897,
+       parser_action_row1898,
+       parser_action_row1899
 };
 
 static int parser_goto_row1[] = {
        1,
-       -1, 3
+       -1, 4
 };
 static int parser_goto_row2[] = {
        1,
-       -1, 4
+       -1, 5
 };
 static int parser_goto_row3[] = {
        3,
-       -1, 5,
-       15, 86,
-       22, 86
+       -1, 6,
+       18, 92,
+       28, 92
 };
 static int parser_goto_row4[] = {
        9,
-       -1, 6,
-       17, 94,
-       24, 94,
-       89, 94,
-       93, 94,
-       103, 94,
-       105, 94,
-       244, 94,
-       250, 94
+       -1, 7,
+       20, 100,
+       30, 100,
+       95, 100,
+       99, 100,
+       112, 100,
+       114, 100,
+       265, 100,
+       274, 100
 };
 static int parser_goto_row5[] = {
        16,
-       -1, 7,
-       4, 20,
-       15, 87,
-       16, 90,
-       17, 95,
-       22, 101,
-       23, 104,
-       24, 106,
-       88, 243,
-       89, 245,
-       93, 247,
-       102, 249,
-       103, 251,
-       105, 252,
-       244, 464,
-       250, 466
+       -1, 8,
+       5, 26,
+       18, 93,
+       19, 96,
+       20, 101,
+       28, 110,
+       29, 113,
+       30, 115,
+       94, 264,
+       95, 266,
+       99, 268,
+       111, 273,
+       112, 275,
+       114, 276,
+       265, 500,
+       274, 503
 };
 static int parser_goto_row6[] = {
        1,
-       -1, 8
+       -1, 9
 };
 static int parser_goto_row7[] = {
        1,
-       -1, 9
+       -1, 10
 };
 static int parser_goto_row8[] = {
-       10,
-       -1, 731,
-       12, 57,
-       21, 100,
-       92, 246,
-       96, 246,
-       185, 360,
-       550, 728,
-       1094, 1252,
-       1224, 1346,
-       1256, 1252
+       9,
+       -1, 789,
+       13, 61,
+       27, 109,
+       98, 267,
+       204, 391,
+       594, 786,
+       993, 1165,
+       1169, 1165,
+       1303, 1450
 };
 static int parser_goto_row9[] = {
        1,
-       -1, 434
+       -1, 469
 };
 static int parser_goto_row10[] = {
        1,
-       -1, 927
+       -1, 1325
 };
 static int parser_goto_row11[] = {
        2,
-       -1, 1364,
-       1366, 1480
+       -1, 1470,
+       1471, 1581
 };
 static int parser_goto_row12[] = {
        2,
-       -1, 1246,
-       1478, 1543
+       -1, 1326,
+       1580, 1651
 };
 static int parser_goto_row13[] = {
        2,
-       -1, 1088,
-       1095, 1254
+       -1, 986,
+       994, 1167
 };
 static int parser_goto_row14[] = {
-       2,
-       -1, 1089,
-       1092, 1249
+       4,
+       -1, 987,
+       990, 1162,
+       1468, 1578,
+       1579, 1650
 };
 static int parser_goto_row15[] = {
        2,
-       -1, 1090,
-       1095, 1255
+       -1, 988,
+       994, 1168
 };
 static int parser_goto_row16[] = {
        1,
-       -1, 1091
+       -1, 989
 };
 static int parser_goto_row17[] = {
        6,
-       -1, 911,
-       767, 914,
-       1603, 1661,
-       1608, 1671,
-       1614, 1681,
-       1766, 1798
+       -1, 970,
+       825, 973,
+       1653, 1725,
+       1658, 1735,
+       1664, 1745,
+       1838, 1871
 };
 static int parser_goto_row18[] = {
        7,
-       -1, 921,
-       1547, 1606,
-       1550, 1610,
-       1602, 1658,
-       1607, 1667,
-       1608, 1672,
-       1613, 1678
+       -1, 980,
+       1584, 1656,
+       1587, 1660,
+       1652, 1722,
+       1657, 1731,
+       1658, 1736,
+       1663, 1742
 };
 static int parser_goto_row19[] = {
        8,
-       -1, 218,
-       100, 248,
-       246, 465,
-       360, 555,
-       728, 877,
-       731, 881,
-       1252, 1368,
-       1346, 1469
+       -1, 240,
+       109, 272,
+       267, 501,
+       391, 599,
+       786, 936,
+       789, 940,
+       1165, 1328,
+       1450, 1568
 };
 static int parser_goto_row20[] = {
        4,
-       -1, 612,
-       614, 776,
-       615, 777,
-       778, 925
+       -1, 661,
+       663, 834,
+       664, 835,
+       836, 984
 };
 static int parser_goto_row21[] = {
        6,
-       -1, 772,
-       1484, 1547,
-       1486, 1550,
-       1545, 1602,
-       1548, 1607,
-       1551, 1613
+       -1, 830,
+       1474, 1584,
+       1476, 1587,
+       1582, 1652,
+       1585, 1657,
+       1588, 1663
 };
 static int parser_goto_row22[] = {
        1,
-       -1, 1077
+       -1, 1149
 };
 static int parser_goto_row23[] = {
        2,
-       -1, 1231,
-       1233, 1353
+       -1, 1310,
+       1312, 1458
 };
 static int parser_goto_row24[] = {
        2,
-       -1, 1078,
-       1352, 1472
+       -1, 1150,
+       1457, 1571
 };
 static int parser_goto_row25[] = {
        8,
-       -1, 922,
-       921, 1085,
-       1550, 1611,
-       1602, 1659,
-       1610, 1675,
-       1613, 1679,
-       1658, 1714,
-       1678, 1731
+       -1, 981,
+       980, 1157,
+       1587, 1661,
+       1652, 1723,
+       1660, 1739,
+       1663, 1743,
+       1722, 1783,
+       1742, 1800
 };
 static int parser_goto_row26[] = {
        2,
-       -1, 1356,
-       1357, 1474
+       -1, 1461,
+       1462, 1573
 };
 static int parser_goto_row27[] = {
        2,
-       -1, 1235,
-       1473, 1541
+       -1, 1314,
+       1572, 1646
 };
 static int parser_goto_row28[] = {
        1,
-       -1, 1236
+       -1, 1315
 };
 static int parser_goto_row29[] = {
        1,
-       -1, 1237
+       -1, 1316
 };
 static int parser_goto_row30[] = {
        1,
@@ -21224,20 +22670,21 @@ static int parser_goto_row30[] = {
 };
 static int parser_goto_row31[] = {
        1,
-       -1, 58
+       -1, 86
 };
 static int parser_goto_row32[] = {
-       10,
-       -1, 59,
-       922, 1086,
-       927, 1092,
-       1085, 1244,
-       1611, 1676,
-       1659, 1715,
-       1675, 1728,
-       1679, 1732,
-       1714, 1760,
-       1731, 1771
+       11,
+       -1, 87,
+       839, 990,
+       981, 1158,
+       1157, 1323,
+       1468, 1579,
+       1661, 1740,
+       1723, 1784,
+       1739, 1797,
+       1743, 1801,
+       1783, 1832,
+       1800, 1843
 };
 static int parser_goto_row33[] = {
        1,
@@ -21245,2157 +22692,2197 @@ static int parser_goto_row33[] = {
 };
 static int parser_goto_row34[] = {
        5,
-       -1, 10,
-       16, 91,
-       23, 91,
-       88, 91,
-       102, 91
+       -1, 11,
+       19, 97,
+       29, 97,
+       94, 97,
+       111, 97
 };
 static int parser_goto_row35[] = {
        24,
-       -1, 391,
-       192, 367,
-       486, 661,
-       505, 684,
-       526, 701,
-       566, 745,
-       726, 874,
-       743, 874,
-       873, 874,
-       892, 874,
-       917, 1079,
-       985, 1135,
-       1080, 1238,
-       1098, 1259,
-       1123, 1275,
-       1151, 1294,
-       1253, 1378,
-       1473, 1238,
-       1491, 1553,
-       1540, 1378,
-       1542, 1601,
-       1552, 1614,
-       1650, 1706,
-       1656, 1711
+       -1, 426,
+       211, 398,
+       523, 711,
+       547, 739,
+       565, 754,
+       610, 803,
+       784, 933,
+       801, 933,
+       932, 933,
+       951, 933,
+       976, 1151,
+       1052, 1210,
+       1152, 1317,
+       1166, 1339,
+       1173, 1360,
+       1198, 1376,
+       1228, 1396,
+       1481, 1590,
+       1572, 1317,
+       1589, 1664,
+       1645, 1339,
+       1647, 1719,
+       1774, 1824,
+       1780, 1829
 };
 static int parser_goto_row36[] = {
        4,
-       -1, 875,
-       743, 893,
-       873, 1006,
-       892, 1025
+       -1, 934,
+       801, 952,
+       932, 1074,
+       951, 1093
 };
 static int parser_goto_row37[] = {
        2,
-       -1, 1008,
-       1009, 1152
+       -1, 1076,
+       1077, 1229
 };
 static int parser_goto_row38[] = {
        5,
-       -1, 773,
-       1076, 1226,
-       1227, 1349,
-       1229, 1350,
-       1546, 1603
+       -1, 831,
+       1148, 1305,
+       1306, 1454,
+       1308, 1455,
+       1583, 1653
 };
 static int parser_goto_row39[] = {
        8,
-       -1, 307,
-       308, 507,
-       362, 556,
-       414, 586,
-       557, 739,
-       1245, 1361,
-       1362, 1477,
-       1549, 1608
+       -1, 334,
+       335, 549,
+       393, 600,
+       449, 631,
+       601, 797,
+       1324, 1466,
+       1467, 1577,
+       1586, 1658
 };
 static int parser_goto_row40[] = {
-       30,
-       -1, 144,
-       31, 152,
-       355, 546,
-       544, 721,
-       688, 860,
-       740, 890,
-       831, 974,
-       833, 152,
-       920, 1083,
-       994, 1142,
-       1084, 1243,
-       1133, 546,
-       1279, 721,
-       1291, 1420,
-       1406, 860,
-       1411, 890,
-       1574, 1142,
-       1605, 1664,
-       1609, 1673,
-       1657, 1712,
-       1665, 1718,
-       1666, 1719,
-       1669, 1723,
-       1674, 1727,
-       1677, 1729,
-       1699, 1420,
-       1713, 1759,
-       1720, 1763,
-       1725, 1767,
-       1730, 1770
+       32,
+       -1, 158,
+       37, 167,
+       386, 590,
+       588, 779,
+       743, 919,
+       798, 949,
+       890, 1041,
+       892, 167,
+       979, 1155,
+       1058, 1215,
+       1062, 1219,
+       1156, 1322,
+       1208, 590,
+       1216, 1390,
+       1380, 779,
+       1393, 1516,
+       1502, 919,
+       1507, 949,
+       1655, 1728,
+       1659, 1737,
+       1692, 1219,
+       1721, 1781,
+       1729, 1787,
+       1730, 1788,
+       1733, 1792,
+       1738, 1796,
+       1741, 1798,
+       1782, 1831,
+       1789, 1835,
+       1794, 1839,
+       1799, 1842,
+       1817, 1516
 };
 static int parser_goto_row41[] = {
        1,
-       -1, 60
+       -1, 62
 };
 static int parser_goto_row42[] = {
        2,
-       -1, 61,
-       850, 991
+       -1, 63,
+       909, 1059
 };
 static int parser_goto_row43[] = {
        4,
-       -1, 303,
-       547, 723,
-       969, 1126,
-       1281, 1410
+       -1, 330,
+       591, 781,
+       1036, 1201,
+       1382, 1506
 };
 static int parser_goto_row44[] = {
        4,
-       -1, 220,
-       222, 436,
-       504, 436,
-       1141, 436
+       -1, 241,
+       243, 471,
+       546, 471,
+       1218, 471
 };
 static int parser_goto_row45[] = {
-       16,
-       -1, 145,
-       12, 62,
-       21, 62,
-       92, 62,
-       96, 62,
-       146, 304,
-       221, 435,
-       437, 435,
-       503, 435,
-       547, 304,
-       683, 435,
-       687, 843,
-       850, 992,
-       969, 304,
-       1281, 304,
-       1405, 843
+       15,
+       -1, 159,
+       13, 64,
+       27, 64,
+       98, 64,
+       160, 331,
+       242, 470,
+       472, 470,
+       545, 470,
+       591, 331,
+       738, 470,
+       742, 902,
+       909, 1060,
+       1036, 331,
+       1382, 331,
+       1501, 902
 };
 static int parser_goto_row46[] = {
        18,
-       -1, 179,
-       36, 180,
-       147, 305,
-       153, 311,
-       369, 564,
-       370, 565,
-       836, 980,
-       837, 981,
-       861, 998,
-       891, 1024,
-       972, 1127,
-       977, 1130,
-       1370, 1489,
-       1371, 1490,
-       1421, 1520,
-       1510, 1575,
-       1513, 1577,
-       1749, 1787
+       -1, 198,
+       41, 199,
+       161, 332,
+       168, 339,
+       400, 608,
+       401, 609,
+       895, 1047,
+       896, 1048,
+       920, 1066,
+       950, 1092,
+       1039, 1202,
+       1044, 1205,
+       1330, 1479,
+       1331, 1480,
+       1517, 1625,
+       1615, 1693,
+       1618, 1695,
+       1860, 1882
 };
 static int parser_goto_row47[] = {
        20,
-       -1, 63,
-       193, 392,
-       687, 844,
-       749, 392,
-       829, 844,
-       833, 844,
-       1021, 392,
-       1133, 844,
-       1253, 1379,
-       1279, 844,
-       1298, 392,
-       1405, 844,
-       1406, 844,
-       1411, 844,
-       1426, 392,
-       1492, 392,
-       1540, 1379,
-       1574, 844,
-       1652, 392,
-       1699, 844
+       -1, 65,
+       212, 427,
+       742, 903,
+       807, 427,
+       888, 903,
+       892, 903,
+       1089, 427,
+       1166, 1340,
+       1208, 903,
+       1380, 903,
+       1400, 427,
+       1482, 427,
+       1501, 903,
+       1502, 903,
+       1507, 903,
+       1522, 427,
+       1645, 1340,
+       1692, 903,
+       1776, 427,
+       1817, 903
 };
 static int parser_goto_row48[] = {
        18,
-       -1, 64,
-       193, 393,
-       687, 845,
-       749, 393,
-       829, 845,
-       833, 845,
-       1021, 393,
-       1133, 845,
-       1279, 845,
-       1298, 393,
-       1405, 845,
-       1406, 845,
-       1411, 845,
-       1426, 393,
-       1492, 393,
-       1574, 845,
-       1652, 393,
-       1699, 845
+       -1, 66,
+       212, 428,
+       742, 904,
+       807, 428,
+       888, 904,
+       892, 904,
+       1089, 428,
+       1208, 904,
+       1380, 904,
+       1400, 428,
+       1482, 428,
+       1501, 904,
+       1502, 904,
+       1507, 904,
+       1522, 428,
+       1692, 904,
+       1776, 428,
+       1817, 904
 };
 static int parser_goto_row49[] = {
        52,
-       -1, 206,
-       207, 421,
-       226, 441,
-       235, 450,
-       237, 454,
-       239, 459,
-       455, 636,
-       460, 640,
-       463, 643,
-       578, 454,
-       580, 459,
-       621, 789,
-       644, 808,
-       754, 643,
-       790, 936,
-       792, 938,
-       794, 941,
-       796, 946,
-       895, 789,
-       942, 1106,
-       947, 1110,
-       950, 1113,
-       990, 454,
-       996, 459,
-       1029, 941,
-       1030, 946,
-       1114, 1267,
-       1146, 643,
-       1171, 1113,
-       1286, 789,
-       1377, 1494,
-       1416, 941,
-       1418, 946,
-       1495, 1558,
-       1496, 1560,
-       1497, 1562,
-       1499, 1566,
-       1501, 1568,
-       1519, 1113,
-       1563, 1624,
-       1569, 1635,
-       1570, 1637,
-       1625, 1687,
-       1638, 1698,
-       1688, 1736,
-       1689, 1738,
-       1690, 1740,
-       1691, 1743,
-       1741, 1779,
-       1744, 1783,
-       1745, 1785,
-       1786, 1808
+       -1, 228,
+       229, 456,
+       246, 476,
+       255, 485,
+       257, 489,
+       259, 494,
+       490, 685,
+       495, 689,
+       498, 692,
+       623, 489,
+       625, 494,
+       670, 847,
+       693, 866,
+       812, 692,
+       848, 1003,
+       850, 1005,
+       852, 1008,
+       854, 1013,
+       954, 847,
+       1009, 1181,
+       1014, 1185,
+       1017, 1188,
+       1057, 489,
+       1064, 494,
+       1097, 1008,
+       1098, 1013,
+       1189, 1368,
+       1223, 692,
+       1248, 1188,
+       1338, 1484,
+       1387, 847,
+       1485, 1595,
+       1486, 1597,
+       1487, 1599,
+       1489, 1603,
+       1491, 1605,
+       1512, 1008,
+       1514, 1013,
+       1600, 1674,
+       1606, 1685,
+       1607, 1687,
+       1624, 1188,
+       1675, 1751,
+       1688, 1762,
+       1752, 1805,
+       1753, 1807,
+       1754, 1809,
+       1755, 1812,
+       1810, 1851,
+       1813, 1855,
+       1814, 1857,
+       1858, 1881
 };
 static int parser_goto_row50[] = {
        10,
-       -1, 65,
-       193, 394,
-       749, 394,
-       1021, 394,
-       1253, 1380,
-       1298, 394,
-       1426, 394,
-       1492, 394,
-       1540, 1380,
-       1652, 394
+       -1, 67,
+       212, 429,
+       807, 429,
+       1089, 429,
+       1166, 1341,
+       1400, 429,
+       1482, 429,
+       1522, 429,
+       1645, 1341,
+       1776, 429
 };
 static int parser_goto_row51[] = {
        1,
-       -1, 66
+       -1, 68
 };
 static int parser_goto_row52[] = {
        3,
-       -1, 846,
-       850, 993,
-       991, 1140
+       -1, 905,
+       909, 1061,
+       1059, 1217
 };
 static int parser_goto_row53[] = {
        10,
-       -1, 67,
-       193, 395,
-       749, 395,
-       1021, 395,
-       1253, 1381,
-       1298, 395,
-       1426, 395,
-       1492, 395,
-       1540, 1381,
-       1652, 395
+       -1, 69,
+       212, 430,
+       807, 430,
+       1089, 430,
+       1166, 1342,
+       1400, 430,
+       1482, 430,
+       1522, 430,
+       1645, 1342,
+       1776, 430
 };
 static int parser_goto_row54[] = {
        10,
-       -1, 68,
-       193, 396,
-       749, 396,
-       1021, 396,
-       1253, 1382,
-       1298, 396,
-       1426, 396,
-       1492, 396,
-       1540, 1382,
-       1652, 396
+       -1, 70,
+       212, 431,
+       807, 431,
+       1089, 431,
+       1166, 1343,
+       1400, 431,
+       1482, 431,
+       1522, 431,
+       1645, 1343,
+       1776, 431
 };
 static int parser_goto_row55[] = {
        10,
-       -1, 69,
-       193, 397,
-       749, 397,
-       1021, 397,
-       1253, 1383,
-       1298, 397,
-       1426, 397,
-       1492, 397,
-       1540, 1383,
-       1652, 397
+       -1, 71,
+       212, 432,
+       807, 432,
+       1089, 432,
+       1166, 1344,
+       1400, 432,
+       1482, 432,
+       1522, 432,
+       1645, 1344,
+       1776, 432
 };
 static int parser_goto_row56[] = {
        10,
-       -1, 70,
-       193, 398,
-       749, 398,
-       1021, 398,
-       1253, 1384,
-       1298, 398,
-       1426, 398,
-       1492, 398,
-       1540, 1384,
-       1652, 398
+       -1, 72,
+       212, 433,
+       807, 433,
+       1089, 433,
+       1166, 1345,
+       1400, 433,
+       1482, 433,
+       1522, 433,
+       1645, 1345,
+       1776, 433
 };
 static int parser_goto_row57[] = {
        2,
-       -1, 363,
-       984, 1134
+       -1, 394,
+       1051, 1209
 };
 static int parser_goto_row58[] = {
        10,
-       -1, 71,
-       193, 399,
-       749, 399,
-       1021, 399,
-       1253, 1385,
-       1298, 399,
-       1426, 399,
-       1492, 399,
-       1540, 1385,
-       1652, 399
+       -1, 73,
+       212, 434,
+       807, 434,
+       1089, 434,
+       1166, 1346,
+       1400, 434,
+       1482, 434,
+       1522, 434,
+       1645, 1346,
+       1776, 434
 };
 static int parser_goto_row59[] = {
        2,
-       -1, 182,
-       839, 982
+       -1, 201,
+       898, 1049
 };
 static int parser_goto_row60[] = {
-       130,
-       -1, 400,
-       34, 165,
-       38, 183,
-       150, 309,
-       151, 310,
-       182, 354,
-       191, 364,
-       194, 413,
-       197, 418,
-       206, 419,
-       233, 446,
-       255, 468,
-       266, 476,
-       317, 514,
-       368, 563,
-       420, 590,
-       421, 591,
-       438, 476,
-       440, 625,
-       441, 626,
-       442, 627,
-       449, 630,
-       450, 631,
-       453, 633,
-       454, 634,
-       458, 637,
-       459, 638,
-       467, 476,
-       562, 744,
-       568, 418,
-       583, 756,
-       632, 476,
-       635, 801,
-       636, 802,
-       639, 803,
-       640, 804,
-       642, 805,
-       643, 806,
-       685, 825,
-       752, 633,
-       753, 637,
-       760, 907,
-       788, 933,
-       789, 934,
-       807, 952,
-       808, 953,
-       826, 966,
-       835, 979,
-       839, 983,
-       863, 1000,
-       888, 1022,
-       894, 1027,
-       902, 805,
-       935, 1099,
-       936, 1100,
-       937, 1101,
-       938, 1102,
-       940, 1103,
-       941, 1104,
-       945, 1107,
-       946, 1108,
-       954, 1116,
-       959, 1121,
-       973, 1128,
-       975, 1129,
-       982, 1132,
-       984, 364,
-       1001, 1148,
-       1023, 1166,
-       1028, 933,
-       1105, 1260,
-       1106, 1261,
-       1109, 1262,
-       1110, 1263,
-       1112, 1264,
-       1113, 1265,
-       1169, 1103,
-       1170, 1107,
-       1172, 1306,
-       1173, 1308,
-       1175, 1309,
-       1266, 1399,
-       1267, 1400,
-       1284, 1412,
-       1305, 1264,
-       1369, 1488,
-       1493, 1555,
-       1494, 1556,
-       1511, 1576,
-       1521, 1580,
-       1525, 907,
-       1557, 1617,
-       1558, 1618,
-       1559, 1619,
-       1560, 1620,
-       1561, 1621,
-       1562, 1622,
-       1565, 1630,
-       1566, 1631,
-       1567, 1632,
-       1568, 1633,
-       1583, 1644,
-       1615, 1682,
-       1623, 1684,
-       1624, 1685,
-       1634, 1693,
-       1635, 1694,
-       1636, 1695,
-       1637, 1696,
-       1686, 1733,
-       1687, 1734,
-       1697, 1746,
-       1698, 1747,
-       1724, 1766,
-       1735, 1772,
-       1736, 1773,
-       1737, 1774,
-       1738, 1775,
-       1739, 1776,
-       1740, 1777,
-       1742, 1780,
-       1743, 1781,
-       1778, 1801,
-       1779, 1802,
-       1782, 1803,
-       1783, 1804,
-       1784, 1805,
-       1785, 1806,
-       1807, 1813,
-       1808, 1814
+       131,
+       -1, 435,
+       39, 180,
+       43, 202,
+       163, 336,
+       166, 338,
+       201, 385,
+       210, 395,
+       213, 448,
+       216, 453,
+       228, 454,
+       253, 481,
+       279, 505,
+       290, 514,
+       344, 555,
+       399, 607,
+       455, 635,
+       456, 636,
+       473, 514,
+       475, 674,
+       476, 675,
+       477, 676,
+       484, 679,
+       485, 680,
+       488, 682,
+       489, 683,
+       493, 686,
+       494, 687,
+       504, 514,
+       606, 802,
+       612, 453,
+       628, 814,
+       681, 514,
+       684, 859,
+       685, 860,
+       688, 861,
+       689, 862,
+       691, 863,
+       692, 864,
+       703, 871,
+       740, 884,
+       810, 682,
+       811, 686,
+       818, 966,
+       846, 1000,
+       847, 1001,
+       865, 1019,
+       866, 1020,
+       885, 1033,
+       894, 1046,
+       898, 1050,
+       922, 1068,
+       947, 1090,
+       953, 1095,
+       961, 863,
+       1002, 1174,
+       1003, 1175,
+       1004, 1176,
+       1005, 1177,
+       1007, 1178,
+       1008, 1179,
+       1012, 1182,
+       1013, 1183,
+       1021, 1191,
+       1026, 514,
+       1040, 1203,
+       1042, 1204,
+       1049, 1207,
+       1051, 395,
+       1069, 1225,
+       1091, 1243,
+       1096, 1000,
+       1180, 1361,
+       1181, 1362,
+       1184, 1363,
+       1185, 1364,
+       1187, 1365,
+       1188, 1366,
+       1246, 1178,
+       1247, 1182,
+       1249, 1408,
+       1250, 1410,
+       1252, 1411,
+       1329, 1478,
+       1367, 1495,
+       1368, 1496,
+       1385, 1508,
+       1407, 1365,
+       1483, 1592,
+       1484, 1593,
+       1594, 1667,
+       1595, 1668,
+       1596, 1669,
+       1597, 1670,
+       1598, 1671,
+       1599, 1672,
+       1602, 1680,
+       1603, 1681,
+       1604, 1682,
+       1605, 1683,
+       1616, 1694,
+       1626, 1698,
+       1630, 966,
+       1665, 1746,
+       1673, 1748,
+       1674, 1749,
+       1684, 1757,
+       1685, 1758,
+       1686, 1759,
+       1687, 1760,
+       1701, 1768,
+       1750, 1802,
+       1751, 1803,
+       1761, 1815,
+       1762, 1816,
+       1793, 1838,
+       1804, 1844,
+       1805, 1845,
+       1806, 1846,
+       1807, 1847,
+       1808, 1848,
+       1809, 1849,
+       1811, 1852,
+       1812, 1853,
+       1850, 1874,
+       1851, 1875,
+       1854, 1876,
+       1855, 1877,
+       1856, 1878,
+       1857, 1879,
+       1880, 1891,
+       1881, 1892
 };
 static int parser_goto_row61[] = {
        1,
-       -1, 166
+       -1, 181
 };
 static int parser_goto_row62[] = {
        6,
-       -1, 167,
-       318, 515,
-       520, 695,
-       522, 697,
-       523, 698,
-       696, 867
+       -1, 182,
+       345, 556,
+       561, 750,
+       563, 752,
+       564, 753,
+       751, 926
 };
 static int parser_goto_row63[] = {
        1,
-       -1, 168
+       -1, 183
 };
 static int parser_goto_row64[] = {
-       10,
-       -1, 169,
-       524, 699,
-       525, 700,
-       529, 704,
-       530, 705,
-       531, 706,
-       532, 707,
-       533, 708,
-       534, 709,
-       535, 710
+       8,
+       -1, 184,
+       567, 756,
+       568, 757,
+       569, 758,
+       570, 759,
+       571, 760,
+       572, 761,
+       573, 762
 };
 static int parser_goto_row65[] = {
-       3,
-       -1, 170,
-       527, 702,
-       528, 703
+       2,
+       -1, 185,
+       566, 755
 };
 static int parser_goto_row66[] = {
-       5,
-       -1, 171,
-       536, 711,
-       537, 712,
-       538, 713,
-       539, 714
+       2,
+       -1, 186,
+       574, 763
 };
 static int parser_goto_row67[] = {
-       11,
-       -1, 172,
-       118, 267,
-       119, 268,
-       162, 323,
-       163, 324,
-       258, 471,
-       320, 517,
-       374, 323,
-       375, 324,
-       1375, 267,
-       1376, 268
+       2,
+       -1, 187,
+       575, 764
 };
 static int parser_goto_row68[] = {
-       1,
-       -1, 173
+       3,
+       -1, 188,
+       576, 765,
+       577, 766
 };
 static int parser_goto_row69[] = {
-       55,
-       -1, 174,
-       12, 72,
-       21, 72,
-       27, 72,
-       31, 72,
-       92, 72,
-       96, 72,
-       146, 72,
-       161, 321,
-       193, 401,
-       221, 72,
-       355, 72,
-       437, 72,
-       503, 72,
-       544, 72,
-       547, 72,
-       683, 72,
-       687, 847,
-       688, 72,
-       740, 72,
-       749, 401,
-       829, 847,
-       831, 72,
-       833, 847,
-       850, 72,
-       920, 72,
-       969, 72,
-       994, 72,
-       1021, 401,
-       1084, 72,
-       1133, 847,
-       1279, 847,
-       1281, 72,
-       1291, 72,
-       1298, 401,
-       1405, 847,
-       1406, 847,
-       1411, 847,
-       1426, 401,
-       1492, 401,
-       1574, 847,
-       1605, 72,
-       1609, 72,
-       1652, 401,
-       1657, 72,
-       1665, 72,
-       1666, 72,
-       1669, 72,
-       1674, 72,
-       1677, 72,
-       1699, 847,
-       1713, 72,
-       1720, 72,
-       1725, 72,
-       1730, 72
+       3,
+       -1, 189,
+       578, 767,
+       579, 768
 };
 static int parser_goto_row70[] = {
-       1,
-       -1, 73
+       5,
+       -1, 190,
+       580, 769,
+       581, 770,
+       582, 771,
+       583, 772
 };
 static int parser_goto_row71[] = {
-       27,
-       -1, 74,
-       905, 1052,
-       1043, 1052,
-       1044, 1052,
-       1045, 1052,
-       1176, 1052,
-       1178, 1052,
-       1322, 1052,
-       1324, 1052,
-       1325, 1052,
-       1326, 1052,
-       1327, 1052,
-       1329, 1052,
-       1330, 1052,
-       1331, 1052,
-       1332, 1052,
-       1333, 1052,
-       1334, 1052,
-       1335, 1052,
-       1336, 1052,
-       1337, 1052,
-       1338, 1052,
-       1339, 1052,
-       1340, 1052,
-       1341, 1052,
-       1441, 1052,
-       1788, 1052
+       15,
+       -1, 191,
+       127, 291,
+       128, 292,
+       129, 293,
+       176, 350,
+       177, 351,
+       178, 352,
+       282, 508,
+       347, 558,
+       405, 350,
+       406, 351,
+       414, 352,
+       1335, 291,
+       1336, 292,
+       1337, 293
 };
 static int parser_goto_row72[] = {
        1,
-       -1, 402
+       -1, 192
 };
 static int parser_goto_row73[] = {
-       2,
-       -1, 572,
-       574, 751
+       56,
+       -1, 193,
+       13, 74,
+       27, 74,
+       33, 74,
+       37, 74,
+       98, 74,
+       160, 74,
+       175, 348,
+       212, 436,
+       242, 74,
+       386, 74,
+       472, 74,
+       545, 74,
+       588, 74,
+       591, 74,
+       738, 74,
+       742, 906,
+       743, 74,
+       798, 74,
+       807, 436,
+       888, 906,
+       890, 74,
+       892, 906,
+       909, 74,
+       979, 74,
+       1036, 74,
+       1058, 74,
+       1062, 74,
+       1089, 436,
+       1156, 74,
+       1208, 906,
+       1216, 74,
+       1380, 906,
+       1382, 74,
+       1393, 74,
+       1400, 436,
+       1482, 436,
+       1501, 906,
+       1502, 906,
+       1507, 906,
+       1522, 436,
+       1655, 74,
+       1659, 74,
+       1692, 906,
+       1721, 74,
+       1729, 74,
+       1730, 74,
+       1733, 74,
+       1738, 74,
+       1741, 74,
+       1776, 436,
+       1782, 74,
+       1789, 74,
+       1794, 74,
+       1799, 74,
+       1817, 906
 };
 static int parser_goto_row74[] = {
-       1,
-       -1, 414
+       2,
+       -1, 515,
+       1026, 1196
 };
 static int parser_goto_row75[] = {
-       2,
-       -1, 588,
-       589, 761
+       1,
+       -1, 75
 };
 static int parser_goto_row76[] = {
-       4,
-       -1, 415,
-       760, 908,
-       1172, 1307,
-       1525, 1582
+       31,
+       -1, 76,
+       964, 1121,
+       1111, 1121,
+       1112, 1121,
+       1113, 1121,
+       1114, 1121,
+       1253, 1121,
+       1255, 1121,
+       1424, 1121,
+       1426, 1121,
+       1427, 1121,
+       1429, 1121,
+       1430, 1121,
+       1431, 1121,
+       1432, 1121,
+       1433, 1121,
+       1434, 1121,
+       1435, 1121,
+       1436, 1121,
+       1437, 1121,
+       1438, 1121,
+       1439, 1121,
+       1440, 1121,
+       1441, 1121,
+       1442, 1121,
+       1443, 1121,
+       1444, 1121,
+       1445, 1121,
+       1446, 1121,
+       1537, 1121,
+       1883, 1121
 };
 static int parser_goto_row77[] = {
-       86,
-       -1, 75,
-       25, 126,
-       49, 126,
-       116, 126,
-       234, 126,
-       236, 126,
-       237, 126,
-       238, 126,
-       239, 126,
-       256, 126,
-       462, 126,
-       463, 126,
-       480, 126,
-       482, 126,
-       483, 126,
-       484, 126,
-       485, 126,
-       487, 126,
-       488, 126,
-       489, 126,
-       490, 126,
-       491, 126,
-       492, 126,
-       493, 126,
-       494, 126,
-       495, 126,
-       496, 126,
-       497, 126,
-       498, 126,
-       499, 126,
-       619, 126,
-       621, 126,
-       656, 126,
-       793, 126,
-       794, 126,
-       795, 126,
-       796, 126,
-       828, 126,
-       842, 126,
-       905, 1053,
-       949, 126,
-       950, 126,
-       988, 126,
-       989, 126,
-       990, 126,
-       995, 126,
-       996, 126,
-       1017, 126,
-       1043, 1053,
-       1044, 1053,
-       1045, 1053,
-       1145, 126,
-       1146, 126,
-       1176, 1053,
-       1178, 1053,
-       1253, 126,
-       1285, 126,
-       1286, 126,
-       1322, 1053,
-       1324, 1053,
-       1325, 1053,
-       1326, 1053,
-       1327, 1053,
-       1329, 1053,
-       1330, 1053,
-       1331, 1053,
-       1332, 1053,
-       1333, 1053,
-       1334, 1053,
-       1335, 1053,
-       1336, 1053,
-       1337, 1053,
-       1338, 1053,
-       1339, 1053,
-       1340, 1053,
-       1341, 1053,
-       1415, 126,
-       1416, 126,
-       1417, 126,
-       1418, 126,
-       1441, 1053,
-       1505, 126,
-       1518, 126,
-       1519, 126,
-       1540, 126,
-       1788, 1053
+       1,
+       -1, 437
 };
 static int parser_goto_row78[] = {
-       1,
-       -1, 76
+       2,
+       -1, 616,
+       618, 809
 };
 static int parser_goto_row79[] = {
        1,
-       -1, 77
+       -1, 449
 };
 static int parser_goto_row80[] = {
        2,
-       -1, 229,
-       232, 444
+       -1, 633,
+       634, 819
 };
 static int parser_goto_row81[] = {
-       1,
-       -1, 230
+       4,
+       -1, 450,
+       818, 967,
+       1249, 1409,
+       1630, 1700
 };
 static int parser_goto_row82[] = {
-       2,
-       -1, 231,
-       232, 445
+       93,
+       -1, 77,
+       31, 136,
+       54, 136,
+       125, 136,
+       254, 136,
+       256, 136,
+       257, 136,
+       258, 136,
+       259, 136,
+       280, 136,
+       497, 136,
+       498, 136,
+       519, 136,
+       521, 136,
+       522, 136,
+       524, 136,
+       525, 136,
+       526, 136,
+       527, 136,
+       528, 136,
+       529, 136,
+       530, 136,
+       531, 136,
+       532, 136,
+       533, 136,
+       534, 136,
+       535, 136,
+       536, 136,
+       537, 136,
+       538, 136,
+       539, 136,
+       540, 136,
+       541, 136,
+       668, 136,
+       670, 136,
+       708, 136,
+       851, 136,
+       852, 136,
+       853, 136,
+       854, 136,
+       887, 136,
+       901, 136,
+       964, 1122,
+       1016, 136,
+       1017, 136,
+       1055, 136,
+       1056, 136,
+       1057, 136,
+       1063, 136,
+       1064, 136,
+       1085, 136,
+       1111, 1122,
+       1112, 1122,
+       1113, 1122,
+       1114, 1122,
+       1166, 136,
+       1222, 136,
+       1223, 136,
+       1253, 1122,
+       1255, 1122,
+       1386, 136,
+       1387, 136,
+       1424, 1122,
+       1426, 1122,
+       1427, 1122,
+       1429, 1122,
+       1430, 1122,
+       1431, 1122,
+       1432, 1122,
+       1433, 1122,
+       1434, 1122,
+       1435, 1122,
+       1436, 1122,
+       1437, 1122,
+       1438, 1122,
+       1439, 1122,
+       1440, 1122,
+       1441, 1122,
+       1442, 1122,
+       1443, 1122,
+       1444, 1122,
+       1445, 1122,
+       1446, 1122,
+       1511, 136,
+       1512, 136,
+       1513, 136,
+       1514, 136,
+       1537, 1122,
+       1610, 136,
+       1623, 136,
+       1624, 136,
+       1645, 136,
+       1883, 1122
 };
 static int parser_goto_row83[] = {
-       16,
-       -1, 186,
-       148, 308,
-       193, 403,
-       362, 557,
-       749, 403,
-       1021, 403,
-       1076, 1227,
-       1245, 1362,
-       1253, 1386,
-       1298, 403,
-       1426, 403,
-       1492, 403,
-       1540, 1595,
-       1616, 1683,
-       1652, 403,
-       1754, 1791
+       1,
+       -1, 78
 };
 static int parser_goto_row84[] = {
-       45,
-       -1, 561,
-       40, 187,
-       41, 188,
-       42, 189,
-       43, 190,
-       50, 209,
-       51, 210,
-       52, 211,
-       53, 212,
-       55, 213,
-       112, 259,
-       113, 260,
-       114, 261,
-       115, 262,
-       121, 270,
-       122, 271,
-       123, 272,
-       124, 273,
-       125, 274,
-       231, 443,
-       445, 628,
-       559, 742,
-       737, 887,
-       748, 899,
-       750, 901,
-       759, 906,
-       1017, 1160,
-       1039, 1179,
-       1040, 1180,
-       1041, 1181,
-       1042, 1182,
-       1047, 1189,
-       1048, 1190,
-       1049, 1191,
-       1050, 1192,
-       1051, 1193,
-       1076, 1228,
-       1168, 1304,
-       1303, 1428,
-       1320, 1438,
-       1321, 1439,
-       1425, 1523,
-       1447, 1532,
-       1531, 1588,
-       1581, 1643
+       1,
+       -1, 79
 };
 static int parser_goto_row85[] = {
-       1,
-       -1, 361
+       2,
+       -1, 249,
+       252, 479
 };
 static int parser_goto_row86[] = {
-       4,
-       -1, 1071,
-       919, 1081,
-       1604, 1662,
-       1668, 1721
+       1,
+       -1, 250
 };
 static int parser_goto_row87[] = {
-       3,
-       -1, 1072,
-       554, 732,
-       876, 1011
+       2,
+       -1, 251,
+       252, 480
 };
 static int parser_goto_row88[] = {
-       2,
-       -1, 733,
-       1019, 1163
+       16,
+       -1, 205,
+       162, 335,
+       212, 438,
+       393, 601,
+       807, 438,
+       1089, 438,
+       1148, 1306,
+       1166, 1347,
+       1324, 1467,
+       1400, 438,
+       1482, 438,
+       1522, 438,
+       1645, 1713,
+       1666, 1747,
+       1776, 438,
+       1865, 1886
 };
 static int parser_goto_row89[] = {
-       1,
-       -1, 1161
+       45,
+       -1, 605,
+       45, 206,
+       46, 207,
+       47, 208,
+       48, 209,
+       55, 231,
+       56, 232,
+       57, 233,
+       58, 234,
+       60, 235,
+       121, 283,
+       122, 284,
+       123, 285,
+       124, 286,
+       131, 295,
+       132, 296,
+       133, 297,
+       134, 298,
+       135, 299,
+       251, 478,
+       480, 677,
+       603, 800,
+       795, 946,
+       806, 958,
+       808, 960,
+       817, 965,
+       1085, 1237,
+       1107, 1256,
+       1108, 1257,
+       1109, 1258,
+       1110, 1259,
+       1116, 1267,
+       1117, 1268,
+       1118, 1269,
+       1119, 1270,
+       1120, 1271,
+       1148, 1307,
+       1245, 1406,
+       1405, 1524,
+       1422, 1534,
+       1423, 1535,
+       1521, 1628,
+       1541, 1637,
+       1636, 1706,
+       1699, 1767
 };
 static int parser_goto_row90[] = {
-       2,
-       -1, 884,
-       885, 1020
+       1,
+       -1, 392
 };
 static int parser_goto_row91[] = {
-       4,
-       -1, 1222,
-       1082, 1240,
-       1663, 1716,
-       1722, 1764
+       6,
+       -1, 790,
+       935, 1079,
+       969, 1144,
+       978, 1153,
+       1654, 1726,
+       1732, 1790
 };
 static int parser_goto_row92[] = {
        2,
-       -1, 1223,
-       1225, 1347
+       -1, 791,
+       1087, 1240
 };
 static int parser_goto_row93[] = {
        1,
-       -1, 1093
+       -1, 1238
 };
 static int parser_goto_row94[] = {
-       4,
-       -1, 1164,
-       1298, 1424,
-       1492, 1554,
-       1652, 1707
+       2,
+       -1, 943,
+       944, 1088
 };
 static int parser_goto_row95[] = {
-       3,
-       -1, 1301,
-       1302, 1427,
-       1500, 1427
+       5,
+       -1, 1302,
+       1304, 1452,
+       1319, 1452,
+       1785, 1452,
+       1836, 1452
 };
 static int parser_goto_row96[] = {
-       4,
-       -1, 1165,
-       193, 404,
-       749, 900,
-       1426, 1524
+       1,
+       -1, 991
 };
 static int parser_goto_row97[] = {
        4,
-       -1, 737,
-       877, 1012,
-       881, 1017,
-       1469, 1540
+       -1, 1241,
+       1400, 1520,
+       1482, 1591,
+       1776, 1825
 };
 static int parser_goto_row98[] = {
-       86,
-       -1, 325,
-       25, 127,
-       49, 207,
-       107, 254,
-       120, 269,
-       156, 127,
-       234, 447,
-       237, 455,
-       239, 460,
-       275, 478,
-       277, 479,
-       300, 501,
-       347, 447,
-       349, 541,
-       350, 542,
-       390, 207,
-       463, 644,
-       470, 650,
-       502, 681,
-       516, 693,
-       543, 720,
-       578, 455,
-       580, 460,
-       619, 785,
-       621, 790,
-       675, 817,
-       677, 819,
-       715, 785,
-       716, 868,
-       754, 644,
-       794, 942,
-       796, 947,
-       821, 963,
-       822, 964,
-       828, 127,
-       842, 207,
-       870, 1003,
-       871, 1004,
-       878, 1013,
-       895, 790,
-       950, 1114,
-       955, 1117,
-       965, 1124,
-       988, 447,
-       990, 455,
-       996, 460,
-       1005, 1149,
-       1014, 1156,
-       1015, 1157,
-       1029, 942,
-       1030, 947,
-       1034, 1174,
-       1046, 1188,
-       1118, 1269,
-       1119, 1270,
-       1146, 644,
-       1158, 1297,
-       1171, 1114,
-       1194, 1318,
-       1196, 1319,
-       1219, 1343,
-       1271, 1402,
-       1285, 785,
-       1286, 790,
-       1313, 1435,
-       1344, 1468,
-       1377, 1495,
-       1416, 942,
-       1418, 947,
-       1462, 1533,
-       1464, 1535,
-       1497, 1563,
-       1501, 1569,
-       1519, 1114,
-       1537, 1591,
-       1538, 1592,
-       1570, 1638,
-       1584, 1645,
-       1593, 1651,
-       1625, 1688,
-       1646, 1701,
-       1647, 1702,
-       1690, 1741,
-       1691, 1744,
-       1703, 1751,
-       1745, 1786
+       3,
+       -1, 1403,
+       1404, 1523,
+       1490, 1523
 };
 static int parser_goto_row99[] = {
-       34,
-       -1, 128,
-       49, 208,
-       234, 448,
-       236, 452,
-       237, 456,
-       238, 457,
-       239, 461,
-       462, 641,
-       463, 645,
-       619, 786,
-       621, 791,
-       793, 939,
-       794, 943,
-       795, 944,
-       796, 948,
-       828, 967,
-       842, 986,
-       949, 1111,
-       950, 1115,
-       988, 1137,
-       989, 1138,
-       990, 1139,
-       995, 1143,
-       996, 1144,
-       1145, 1289,
-       1146, 1290,
-       1285, 1413,
-       1286, 1414,
-       1415, 1514,
-       1416, 1515,
-       1417, 1516,
-       1418, 1517,
-       1518, 1578,
-       1519, 1579
+       4,
+       -1, 1242,
+       212, 439,
+       807, 959,
+       1522, 1629
 };
 static int parser_goto_row100[] = {
-       6,
-       -1, 226,
-       140, 299,
-       174, 346,
-       265, 299,
-       321, 346,
-       1392, 1499
+       4,
+       -1, 795,
+       936, 1080,
+       940, 1085,
+       1568, 1645
 };
 static int parser_goto_row101[] = {
-       1,
-       -1, -1
+       86,
+       -1, 353,
+       31, 137,
+       54, 229,
+       116, 278,
+       130, 294,
+       170, 137,
+       254, 482,
+       257, 490,
+       259, 495,
+       300, 517,
+       302, 518,
+       327, 543,
+       378, 482,
+       380, 585,
+       381, 586,
+       425, 229,
+       498, 693,
+       507, 700,
+       544, 736,
+       557, 748,
+       587, 778,
+       623, 490,
+       625, 495,
+       668, 843,
+       670, 848,
+       730, 876,
+       732, 878,
+       773, 843,
+       774, 927,
+       812, 693,
+       852, 1009,
+       854, 1014,
+       880, 1030,
+       881, 1031,
+       887, 137,
+       901, 229,
+       929, 1071,
+       930, 1072,
+       937, 1081,
+       954, 848,
+       1017, 1189,
+       1022, 1192,
+       1032, 1199,
+       1055, 482,
+       1057, 490,
+       1064, 495,
+       1073, 1226,
+       1082, 1233,
+       1083, 1234,
+       1097, 1009,
+       1098, 1014,
+       1102, 1251,
+       1115, 1266,
+       1193, 1370,
+       1194, 1371,
+       1223, 693,
+       1235, 1399,
+       1248, 1189,
+       1272, 1420,
+       1274, 1421,
+       1299, 1448,
+       1338, 1485,
+       1372, 1498,
+       1386, 843,
+       1387, 848,
+       1415, 1531,
+       1449, 1567,
+       1487, 1600,
+       1491, 1606,
+       1512, 1009,
+       1514, 1014,
+       1561, 1638,
+       1563, 1640,
+       1607, 1688,
+       1624, 1189,
+       1642, 1709,
+       1643, 1710,
+       1675, 1752,
+       1702, 1769,
+       1711, 1775,
+       1754, 1810,
+       1755, 1813,
+       1770, 1819,
+       1771, 1820,
+       1814, 1858,
+       1821, 1862
 };
 static int parser_goto_row102[] = {
-       4,
-       -1, 477,
-       438, 618,
-       467, 647,
-       632, 800
+       34,
+       -1, 138,
+       54, 230,
+       254, 483,
+       256, 487,
+       257, 491,
+       258, 492,
+       259, 496,
+       497, 690,
+       498, 694,
+       668, 844,
+       670, 849,
+       851, 1006,
+       852, 1010,
+       853, 1011,
+       854, 1015,
+       887, 1034,
+       901, 1053,
+       1016, 1186,
+       1017, 1190,
+       1055, 1212,
+       1056, 1213,
+       1057, 1214,
+       1063, 1220,
+       1064, 1221,
+       1222, 1391,
+       1223, 1392,
+       1386, 1509,
+       1387, 1510,
+       1511, 1619,
+       1512, 1620,
+       1513, 1621,
+       1514, 1622,
+       1623, 1696,
+       1624, 1697
 };
 static int parser_goto_row103[] = {
-       2,
-       -1, 814,
-       815, 960
+       6,
+       -1, 246,
+       154, 326,
+       193, 377,
+       289, 326,
+       348, 377,
+       1353, 1489
 };
 static int parser_goto_row104[] = {
-       3,
-       -1, 314,
-       584, 757,
-       978, 1131
+       4,
+       -1, 516,
+       473, 667,
+       504, 697,
+       681, 858
 };
 static int parser_goto_row105[] = {
        2,
-       -1, 315,
-       510, 689
+       -1, 873,
+       874, 1027
 };
 static int parser_goto_row106[] = {
-       2,
-       -1, 764,
-       593, 767
+       3,
+       -1, 342,
+       629, 815,
+       1045, 1206
 };
 static int parser_goto_row107[] = {
-       149,
-       -1, 175,
-       12, 78,
-       21, 78,
-       25, 129,
-       27, 78,
-       31, 78,
-       49, 129,
-       92, 78,
-       96, 78,
-       116, 264,
-       146, 78,
-       161, 322,
-       193, 405,
-       221, 78,
-       234, 129,
-       236, 129,
-       237, 129,
-       238, 129,
-       239, 129,
-       256, 129,
-       355, 78,
-       437, 78,
-       439, 622,
-       462, 129,
-       463, 129,
-       480, 129,
-       482, 129,
-       483, 129,
-       484, 129,
-       485, 129,
-       487, 129,
-       488, 129,
-       489, 129,
-       490, 129,
-       491, 129,
-       492, 129,
-       493, 129,
-       494, 129,
-       495, 129,
-       496, 129,
-       497, 129,
-       498, 129,
-       499, 129,
-       500, 678,
-       503, 78,
-       540, 717,
-       544, 78,
-       547, 78,
-       619, 129,
-       621, 129,
-       652, 812,
-       656, 129,
-       683, 78,
-       687, 848,
-       688, 78,
-       694, 866,
-       740, 78,
-       747, 622,
-       749, 405,
-       793, 129,
-       794, 129,
-       795, 129,
-       796, 129,
-       828, 129,
-       829, 848,
-       831, 78,
-       833, 848,
-       842, 129,
-       850, 78,
-       905, 1054,
-       920, 78,
-       949, 129,
-       950, 129,
-       969, 78,
-       988, 129,
-       989, 129,
-       990, 129,
-       994, 78,
-       995, 129,
-       996, 129,
-       1021, 405,
-       1043, 1184,
-       1044, 1054,
-       1045, 1054,
-       1084, 78,
-       1133, 848,
-       1136, 622,
-       1145, 129,
-       1146, 129,
-       1176, 1054,
-       1178, 1054,
-       1253, 1387,
-       1279, 848,
-       1281, 78,
-       1285, 129,
-       1286, 129,
-       1291, 78,
-       1298, 405,
-       1322, 1054,
-       1324, 1054,
-       1325, 1054,
-       1326, 1054,
-       1327, 1054,
-       1329, 1054,
-       1330, 1054,
-       1331, 1054,
-       1332, 1054,
-       1333, 1054,
-       1334, 1054,
-       1335, 1054,
-       1336, 1054,
-       1337, 1054,
-       1338, 1054,
-       1339, 1054,
-       1340, 1054,
-       1341, 1054,
-       1342, 1465,
-       1405, 848,
-       1406, 848,
-       1411, 848,
-       1415, 129,
-       1416, 129,
-       1417, 129,
-       1418, 129,
-       1426, 405,
-       1437, 1529,
-       1441, 1054,
-       1492, 405,
-       1505, 129,
-       1518, 129,
-       1519, 129,
-       1540, 1387,
-       1564, 1626,
-       1574, 848,
-       1605, 78,
-       1609, 78,
-       1652, 405,
-       1657, 78,
-       1665, 78,
-       1666, 78,
-       1669, 78,
-       1674, 78,
-       1677, 78,
-       1699, 848,
-       1713, 78,
-       1720, 78,
-       1725, 78,
-       1730, 78,
-       1788, 1054
+       2,
+       -1, 343,
+       552, 744
 };
 static int parser_goto_row108[] = {
-       1,
-       -1, 781
+       2,
+       -1, 822,
+       638, 825
 };
 static int parser_goto_row109[] = {
-       6,
-       -1, 1239,
-       432, 613,
-       1358, 1476,
-       1482, 1545,
-       1484, 1548,
-       1486, 1551
+       157,
+       -1, 194,
+       13, 80,
+       27, 80,
+       31, 139,
+       33, 80,
+       37, 80,
+       54, 139,
+       98, 80,
+       125, 288,
+       160, 80,
+       175, 349,
+       212, 440,
+       242, 80,
+       254, 139,
+       256, 139,
+       257, 139,
+       258, 139,
+       259, 139,
+       280, 139,
+       386, 80,
+       472, 80,
+       474, 671,
+       497, 139,
+       498, 139,
+       519, 139,
+       521, 139,
+       522, 139,
+       524, 139,
+       525, 139,
+       526, 139,
+       527, 139,
+       528, 139,
+       529, 139,
+       530, 139,
+       531, 139,
+       532, 139,
+       533, 139,
+       534, 139,
+       535, 139,
+       536, 139,
+       537, 139,
+       538, 139,
+       539, 139,
+       540, 139,
+       541, 139,
+       542, 733,
+       545, 80,
+       584, 775,
+       588, 80,
+       591, 80,
+       668, 139,
+       670, 139,
+       702, 870,
+       708, 139,
+       738, 80,
+       742, 907,
+       743, 80,
+       749, 925,
+       798, 80,
+       805, 671,
+       807, 440,
+       851, 139,
+       852, 139,
+       853, 139,
+       854, 139,
+       887, 139,
+       888, 907,
+       890, 80,
+       892, 907,
+       901, 139,
+       909, 80,
+       964, 1123,
+       979, 80,
+       1016, 139,
+       1017, 139,
+       1036, 80,
+       1055, 139,
+       1056, 139,
+       1057, 139,
+       1058, 80,
+       1062, 80,
+       1063, 139,
+       1064, 139,
+       1089, 440,
+       1111, 1261,
+       1112, 1123,
+       1113, 1123,
+       1114, 1123,
+       1156, 80,
+       1166, 1348,
+       1208, 907,
+       1211, 671,
+       1216, 80,
+       1222, 139,
+       1223, 139,
+       1253, 1123,
+       1255, 1123,
+       1380, 907,
+       1382, 80,
+       1386, 139,
+       1387, 139,
+       1393, 80,
+       1400, 440,
+       1424, 1123,
+       1426, 1123,
+       1427, 1123,
+       1429, 1123,
+       1430, 1123,
+       1431, 1123,
+       1432, 1123,
+       1433, 1123,
+       1434, 1123,
+       1435, 1123,
+       1436, 1123,
+       1437, 1123,
+       1438, 1123,
+       1439, 1123,
+       1440, 1123,
+       1441, 1123,
+       1442, 1123,
+       1443, 1123,
+       1444, 1123,
+       1445, 1123,
+       1446, 1123,
+       1447, 1564,
+       1482, 440,
+       1501, 907,
+       1502, 907,
+       1507, 907,
+       1511, 139,
+       1512, 139,
+       1513, 139,
+       1514, 139,
+       1522, 440,
+       1533, 1634,
+       1537, 1123,
+       1601, 1676,
+       1610, 139,
+       1623, 139,
+       1624, 139,
+       1645, 1348,
+       1655, 80,
+       1659, 80,
+       1692, 907,
+       1721, 80,
+       1729, 80,
+       1730, 80,
+       1733, 80,
+       1738, 80,
+       1741, 80,
+       1776, 440,
+       1782, 80,
+       1789, 80,
+       1794, 80,
+       1799, 80,
+       1817, 907,
+       1883, 1123
 };
 static int parser_goto_row110[] = {
-       22,
-       -1, 79,
-       81, 240,
-       142, 240,
-       177, 240,
-       410, 240,
-       615, 240,
-       624, 240,
-       680, 240,
-       719, 240,
-       765, 240,
-       783, 240,
-       859, 240,
-       880, 240,
-       898, 240,
-       957, 240,
-       1067, 240,
-       1070, 240,
-       1288, 240,
-       1396, 240,
-       1467, 240,
-       1586, 240,
-       1629, 240
+       1,
+       -1, 839
 };
 static int parser_goto_row111[] = {
-       178,
-       -1, 176,
-       12, 80,
-       21, 80,
-       25, 130,
-       27, 80,
-       31, 80,
-       49, 130,
-       81, 241,
-       92, 80,
-       96, 80,
-       116, 130,
-       142, 301,
-       146, 80,
-       177, 351,
-       193, 406,
-       221, 80,
-       234, 130,
-       236, 130,
-       237, 130,
-       238, 130,
-       239, 130,
-       256, 130,
-       355, 80,
-       410, 581,
-       432, 614,
-       437, 80,
-       439, 623,
-       462, 130,
-       463, 130,
-       480, 130,
-       482, 130,
-       483, 130,
-       484, 130,
-       485, 130,
-       487, 130,
-       488, 130,
-       489, 130,
-       490, 130,
-       491, 130,
-       492, 130,
-       493, 130,
-       494, 130,
-       495, 130,
-       496, 130,
-       497, 130,
-       498, 130,
-       499, 130,
-       500, 679,
-       503, 80,
-       540, 718,
-       544, 80,
-       547, 80,
-       615, 778,
-       617, 782,
-       619, 130,
-       621, 130,
-       624, 797,
-       652, 679,
-       656, 130,
-       680, 823,
-       683, 80,
-       687, 849,
-       688, 80,
-       694, 718,
-       719, 872,
-       730, 879,
-       740, 80,
-       747, 896,
-       749, 406,
-       783, 930,
-       793, 130,
-       794, 130,
-       795, 130,
-       796, 130,
-       811, 956,
-       828, 130,
-       829, 849,
-       831, 80,
-       833, 849,
-       842, 130,
-       850, 80,
-       859, 997,
-       880, 1016,
-       898, 1031,
-       905, 1055,
-       920, 80,
-       949, 130,
-       950, 130,
-       957, 1120,
-       969, 80,
-       988, 130,
-       989, 130,
-       990, 130,
-       994, 80,
-       995, 130,
-       996, 130,
-       1021, 406,
-       1043, 1055,
-       1044, 1055,
-       1045, 1055,
-       1067, 1220,
-       1080, 614,
-       1084, 80,
-       1133, 849,
-       1136, 1287,
-       1145, 130,
-       1146, 130,
-       1176, 1055,
-       1178, 1055,
-       1253, 1388,
-       1279, 849,
-       1281, 80,
-       1285, 130,
-       1286, 130,
-       1288, 1419,
-       1291, 80,
-       1298, 406,
-       1322, 1055,
-       1324, 1055,
-       1325, 1055,
-       1326, 1055,
-       1327, 1055,
-       1329, 1055,
-       1330, 1055,
-       1331, 1055,
-       1332, 1055,
-       1333, 1055,
-       1334, 1055,
-       1335, 1055,
-       1336, 1055,
-       1337, 1055,
-       1338, 1055,
-       1339, 1055,
-       1340, 1055,
-       1341, 1055,
-       1342, 1466,
-       1358, 614,
-       1396, 1502,
-       1405, 849,
-       1406, 849,
-       1411, 849,
-       1415, 130,
-       1416, 130,
-       1417, 130,
-       1418, 130,
-       1426, 406,
-       1437, 1466,
-       1441, 1055,
-       1467, 1539,
-       1473, 614,
-       1482, 614,
-       1484, 614,
-       1486, 614,
-       1492, 406,
-       1505, 130,
-       1518, 130,
-       1519, 130,
-       1528, 1585,
-       1540, 1388,
-       1564, 1627,
-       1574, 849,
-       1586, 1648,
-       1605, 80,
-       1609, 80,
-       1629, 1692,
-       1652, 406,
-       1657, 80,
-       1665, 80,
-       1666, 80,
-       1669, 80,
-       1674, 80,
-       1677, 80,
-       1699, 849,
-       1713, 80,
-       1720, 80,
-       1725, 80,
-       1730, 80,
-       1788, 1055
+       6,
+       -1, 1318,
+       467, 662,
+       1463, 1575,
+       1472, 1582,
+       1474, 1585,
+       1476, 1588
 };
 static int parser_goto_row112[] = {
-       12,
-       -1, 1242,
-       1243, 1360,
-       1664, 1717,
-       1673, 1726,
-       1712, 1758,
-       1718, 1761,
-       1719, 1762,
-       1727, 1768,
-       1729, 1769,
-       1759, 1796,
-       1763, 1797,
-       1770, 1800
+       22,
+       -1, 81,
+       83, 260,
+       156, 260,
+       196, 260,
+       445, 260,
+       664, 260,
+       673, 260,
+       735, 260,
+       777, 260,
+       823, 260,
+       841, 260,
+       918, 260,
+       939, 260,
+       957, 260,
+       1024, 260,
+       1140, 260,
+       1143, 260,
+       1357, 260,
+       1389, 260,
+       1566, 260,
+       1679, 260,
+       1704, 260
 };
 static int parser_goto_row113[] = {
-       14,
-       -1, 85,
-       766, 913,
-       910, 1073,
-       911, 1074,
-       914, 1075,
-       919, 1082,
-       1091, 1248,
-       1540, 1596,
-       1595, 1653,
-       1597, 1654,
-       1604, 1663,
-       1668, 1722,
-       1754, 1792,
-       1791, 1811
+       186,
+       -1, 195,
+       13, 82,
+       27, 82,
+       31, 140,
+       33, 82,
+       37, 82,
+       54, 140,
+       83, 261,
+       98, 82,
+       125, 140,
+       156, 328,
+       160, 82,
+       196, 382,
+       212, 441,
+       242, 82,
+       254, 140,
+       256, 140,
+       257, 140,
+       258, 140,
+       259, 140,
+       280, 140,
+       386, 82,
+       445, 626,
+       467, 663,
+       472, 82,
+       474, 672,
+       497, 140,
+       498, 140,
+       519, 140,
+       521, 140,
+       522, 140,
+       524, 140,
+       525, 140,
+       526, 140,
+       527, 140,
+       528, 140,
+       529, 140,
+       530, 140,
+       531, 140,
+       532, 140,
+       533, 140,
+       534, 140,
+       535, 140,
+       536, 140,
+       537, 140,
+       538, 140,
+       539, 140,
+       540, 140,
+       541, 140,
+       542, 734,
+       545, 82,
+       584, 776,
+       588, 82,
+       591, 82,
+       664, 836,
+       666, 840,
+       668, 140,
+       670, 140,
+       673, 855,
+       702, 734,
+       708, 140,
+       735, 882,
+       738, 82,
+       742, 908,
+       743, 82,
+       749, 776,
+       777, 931,
+       788, 938,
+       798, 82,
+       805, 955,
+       807, 441,
+       841, 997,
+       851, 140,
+       852, 140,
+       853, 140,
+       854, 140,
+       869, 1023,
+       887, 140,
+       888, 908,
+       890, 82,
+       892, 908,
+       901, 140,
+       909, 82,
+       918, 1065,
+       939, 1084,
+       957, 1099,
+       964, 1124,
+       979, 82,
+       1016, 140,
+       1017, 140,
+       1024, 1195,
+       1036, 82,
+       1055, 140,
+       1056, 140,
+       1057, 140,
+       1058, 82,
+       1062, 82,
+       1063, 140,
+       1064, 140,
+       1089, 441,
+       1111, 1124,
+       1112, 1124,
+       1113, 1124,
+       1114, 1124,
+       1140, 1300,
+       1152, 663,
+       1156, 82,
+       1166, 1349,
+       1208, 908,
+       1211, 1388,
+       1216, 82,
+       1222, 140,
+       1223, 140,
+       1253, 1124,
+       1255, 1124,
+       1357, 1492,
+       1380, 908,
+       1382, 82,
+       1386, 140,
+       1387, 140,
+       1389, 1515,
+       1393, 82,
+       1400, 441,
+       1424, 1124,
+       1426, 1124,
+       1427, 1124,
+       1429, 1124,
+       1430, 1124,
+       1431, 1124,
+       1432, 1124,
+       1433, 1124,
+       1434, 1124,
+       1435, 1124,
+       1436, 1124,
+       1437, 1124,
+       1438, 1124,
+       1439, 1124,
+       1440, 1124,
+       1441, 1124,
+       1442, 1124,
+       1443, 1124,
+       1444, 1124,
+       1445, 1124,
+       1446, 1124,
+       1447, 1565,
+       1463, 663,
+       1472, 663,
+       1474, 663,
+       1476, 663,
+       1482, 441,
+       1501, 908,
+       1502, 908,
+       1507, 908,
+       1511, 140,
+       1512, 140,
+       1513, 140,
+       1514, 140,
+       1522, 441,
+       1533, 1565,
+       1537, 1124,
+       1566, 1644,
+       1572, 663,
+       1601, 1677,
+       1610, 140,
+       1623, 140,
+       1624, 140,
+       1633, 1703,
+       1645, 1349,
+       1655, 82,
+       1659, 82,
+       1679, 1756,
+       1692, 908,
+       1704, 1772,
+       1721, 82,
+       1729, 82,
+       1730, 82,
+       1733, 82,
+       1738, 82,
+       1741, 82,
+       1776, 441,
+       1782, 82,
+       1789, 82,
+       1794, 82,
+       1799, 82,
+       1817, 908,
+       1883, 1124
 };
 static int parser_goto_row114[] = {
-       56,
-       -1, 149,
-       0, 11,
-       4, 11,
-       15, 11,
-       16, 11,
-       17, 11,
-       22, 11,
-       23, 11,
-       24, 11,
-       27, 146,
-       31, 146,
-       62, 221,
-       88, 11,
-       89, 11,
-       93, 11,
-       102, 11,
-       103, 11,
-       105, 11,
-       222, 437,
-       244, 11,
-       250, 11,
-       304, 503,
-       355, 547,
-       504, 683,
-       544, 547,
-       687, 850,
-       688, 146,
-       740, 146,
-       829, 969,
-       831, 547,
-       833, 969,
-       920, 547,
-       992, 221,
-       994, 547,
-       1084, 547,
-       1133, 1281,
-       1141, 437,
-       1279, 1281,
-       1291, 146,
-       1405, 850,
-       1406, 969,
-       1411, 969,
-       1574, 1281,
-       1605, 547,
-       1609, 547,
-       1657, 547,
-       1665, 547,
-       1666, 547,
-       1669, 547,
-       1674, 547,
-       1677, 547,
-       1699, 969,
-       1713, 547,
-       1720, 547,
-       1725, 547,
-       1730, 547
+       12,
+       -1, 1321,
+       1322, 1465,
+       1728, 1786,
+       1737, 1795,
+       1781, 1830,
+       1787, 1833,
+       1788, 1834,
+       1796, 1840,
+       1798, 1841,
+       1831, 1869,
+       1835, 1870,
+       1842, 1873
 };
 static int parser_goto_row115[] = {
-       255,
-       -1, 96,
-       0, 12,
-       4, 21,
-       15, 21,
-       16, 92,
-       22, 21,
-       23, 92,
-       29, 150,
-       30, 151,
-       32, 154,
-       33, 155,
-       39, 184,
-       44, 191,
-       46, 193,
-       47, 194,
-       77, 233,
-       88, 92,
-       102, 92,
-       108, 255,
-       109, 256,
-       110, 257,
-       111, 258,
-       117, 266,
-       157, 317,
-       158, 318,
-       159, 319,
-       160, 320,
-       195, 416,
-       196, 417,
-       214, 422,
-       215, 423,
-       216, 424,
-       217, 425,
-       223, 438,
-       225, 439,
-       230, 442,
-       253, 467,
-       263, 472,
-       278, 480,
-       279, 482,
-       280, 483,
-       281, 484,
-       282, 485,
-       283, 486,
-       284, 487,
-       285, 488,
-       286, 489,
-       287, 490,
-       288, 491,
-       289, 492,
-       290, 493,
-       291, 494,
-       292, 495,
-       293, 496,
-       294, 497,
-       295, 498,
-       296, 499,
-       298, 500,
-       306, 505,
-       309, 508,
-       310, 509,
-       312, 510,
-       314, 511,
-       316, 513,
-       326, 520,
-       327, 522,
-       328, 523,
-       329, 524,
-       330, 525,
-       331, 526,
-       332, 527,
-       333, 528,
-       334, 529,
-       335, 530,
-       336, 531,
-       337, 532,
-       338, 533,
-       339, 534,
-       340, 535,
-       341, 536,
-       342, 537,
-       343, 538,
-       344, 539,
-       345, 540,
-       359, 554,
-       363, 558,
-       373, 194,
-       402, 570,
-       404, 573,
-       411, 583,
-       412, 584,
-       413, 585,
-       426, 592,
-       427, 593,
-       434, 617,
-       446, 629,
-       451, 632,
-       468, 648,
-       474, 652,
-       476, 653,
-       481, 656,
-       506, 685,
-       512, 691,
-       514, 692,
-       518, 694,
-       521, 696,
-       549, 726,
-       553, 730,
-       560, 743,
-       569, 747,
-       571, 749,
-       587, 760,
-       613, 774,
-       620, 787,
-       627, 798,
-       649, 811,
-       676, 818,
-       686, 826,
-       689, 862,
-       690, 863,
-       724, 873,
-       727, 876,
-       732, 882,
-       738, 888,
-       741, 892,
-       756, 903,
-       757, 904,
-       758, 905,
-       762, 909,
-       770, 916,
-       771, 917,
-       773, 924,
-       810, 954,
-       813, 959,
-       830, 973,
-       832, 975,
-       834, 978,
-       840, 984,
-       865, 1001,
-       875, 1010,
-       883, 1019,
-       886, 1021,
-       889, 1023,
-       893, 1026,
-       907, 1068,
-       918, 1080,
-       926, 1087,
-       927, 1094,
-       931, 1097,
-       932, 1098,
-       961, 1122,
-       962, 1123,
-       987, 1136,
-       1000, 1147,
-       1006, 1150,
-       1007, 1151,
-       1011, 1154,
-       1025, 1167,
-       1032, 1172,
-       1033, 1173,
-       1035, 1175,
-       1036, 1176,
-       1037, 1177,
-       1038, 1178,
-       1056, 1197,
-       1073, 1224,
-       1078, 1232,
-       1082, 1224,
-       1092, 1094,
-       1095, 1256,
-       1116, 1268,
-       1121, 1272,
-       1128, 1276,
-       1129, 1277,
-       1131, 1278,
-       1134, 1283,
-       1148, 1292,
-       1159, 1298,
-       1164, 1299,
-       1183, 1315,
-       1198, 1322,
-       1199, 1324,
-       1200, 1325,
-       1201, 1326,
-       1202, 1327,
-       1203, 1328,
-       1204, 1329,
-       1205, 1330,
-       1206, 1331,
-       1207, 1332,
-       1208, 1333,
-       1209, 1334,
-       1210, 1335,
-       1211, 1336,
-       1212, 1337,
-       1213, 1338,
-       1214, 1339,
-       1215, 1340,
-       1216, 1341,
-       1218, 1342,
-       1225, 1224,
-       1229, 1351,
-       1230, 1352,
-       1233, 1354,
-       1246, 1365,
-       1258, 1397,
-       1259, 1398,
-       1274, 1403,
-       1275, 1404,
-       1300, 1426,
-       1306, 1429,
-       1308, 1430,
-       1309, 1431,
-       1317, 1437,
-       1323, 1441,
-       1350, 1471,
-       1355, 1473,
-       1363, 1478,
-       1366, 1481,
-       1374, 1492,
-       1401, 1505,
-       1407, 1511,
-       1422, 1521,
-       1424, 1522,
-       1434, 1528,
-       1463, 1534,
-       1475, 1542,
-       1484, 774,
-       1486, 774,
-       1487, 1552,
-       1498, 1564,
-       1503, 1571,
-       1506, 1573,
-       1526, 1583,
-       1545, 774,
-       1548, 774,
-       1551, 774,
-       1576, 1642,
-       1589, 1649,
-       1590, 1650,
-       1594, 1652,
-       1598, 1655,
-       1600, 1656,
-       1644, 1700,
-       1663, 1224,
-       1670, 1724,
-       1705, 1752,
-       1706, 1753,
-       1709, 1755,
-       1710, 1756,
-       1711, 1757,
-       1722, 1224,
-       1750, 1788,
-       1789, 1810,
-       1793, 1812
+       14,
+       -1, 91,
+       824, 972,
+       969, 1145,
+       970, 1146,
+       973, 1147,
+       978, 1154,
+       989, 1161,
+       1645, 1714,
+       1654, 1727,
+       1713, 1777,
+       1715, 1778,
+       1732, 1791,
+       1865, 1887,
+       1886, 1895
 };
 static int parser_goto_row116[] = {
-       1,
-       -1, 13
+       55,
+       -1, 591,
+       0, 12,
+       3, 23,
+       5, 12,
+       18, 12,
+       19, 12,
+       20, 12,
+       28, 12,
+       29, 12,
+       30, 12,
+       33, 160,
+       37, 160,
+       64, 242,
+       94, 12,
+       95, 12,
+       99, 12,
+       104, 269,
+       105, 270,
+       111, 12,
+       112, 12,
+       114, 12,
+       243, 472,
+       265, 12,
+       271, 502,
+       274, 12,
+       331, 545,
+       546, 738,
+       742, 909,
+       743, 160,
+       798, 160,
+       839, 992,
+       888, 1036,
+       892, 1036,
+       990, 992,
+       994, 992,
+       1060, 242,
+       1145, 992,
+       1154, 992,
+       1208, 1382,
+       1218, 472,
+       1304, 992,
+       1319, 992,
+       1380, 1382,
+       1393, 160,
+       1468, 992,
+       1501, 909,
+       1502, 1036,
+       1507, 1036,
+       1579, 992,
+       1692, 1382,
+       1727, 992,
+       1785, 992,
+       1791, 992,
+       1817, 1036,
+       1836, 992
 };
 static int parser_goto_row117[] = {
-       1,
-       -1, 14
+       18,
+       -1, 98,
+       0, 13,
+       5, 27,
+       18, 27,
+       28, 27,
+       839, 993,
+       990, 993,
+       994, 1169,
+       1145, 1303,
+       1154, 1303,
+       1304, 1303,
+       1319, 1303,
+       1468, 993,
+       1579, 993,
+       1727, 1303,
+       1785, 1303,
+       1791, 1303,
+       1836, 1303
 };
 static int parser_goto_row118[] = {
-       4,
-       -1, 923,
-       1550, 1612,
-       1602, 1660,
-       1613, 1680
+       249,
+       -1, 14,
+       35, 163,
+       36, 166,
+       38, 169,
+       44, 203,
+       49, 210,
+       51, 212,
+       52, 213,
+       79, 253,
+       84, 262,
+       117, 279,
+       118, 280,
+       119, 281,
+       120, 282,
+       126, 290,
+       171, 344,
+       172, 345,
+       173, 346,
+       174, 347,
+       214, 451,
+       215, 452,
+       236, 457,
+       237, 458,
+       238, 459,
+       239, 460,
+       244, 473,
+       245, 474,
+       250, 477,
+       277, 504,
+       287, 509,
+       303, 519,
+       304, 521,
+       305, 522,
+       306, 523,
+       307, 524,
+       308, 525,
+       309, 526,
+       310, 527,
+       311, 528,
+       312, 529,
+       313, 530,
+       314, 531,
+       315, 532,
+       316, 533,
+       317, 534,
+       318, 535,
+       319, 536,
+       320, 537,
+       321, 538,
+       322, 539,
+       323, 540,
+       324, 541,
+       325, 542,
+       333, 547,
+       336, 550,
+       338, 551,
+       340, 552,
+       342, 553,
+       354, 561,
+       355, 563,
+       356, 564,
+       357, 565,
+       358, 566,
+       359, 567,
+       360, 568,
+       361, 569,
+       362, 570,
+       363, 571,
+       364, 572,
+       365, 573,
+       366, 574,
+       367, 575,
+       368, 576,
+       369, 577,
+       370, 578,
+       371, 579,
+       372, 580,
+       373, 581,
+       374, 582,
+       375, 583,
+       376, 584,
+       390, 598,
+       394, 602,
+       404, 213,
+       437, 614,
+       439, 617,
+       446, 628,
+       447, 629,
+       448, 630,
+       461, 637,
+       462, 638,
+       469, 666,
+       481, 678,
+       486, 681,
+       499, 695,
+       505, 698,
+       511, 702,
+       515, 705,
+       520, 708,
+       548, 740,
+       554, 746,
+       555, 747,
+       559, 749,
+       562, 751,
+       593, 784,
+       597, 788,
+       604, 801,
+       613, 805,
+       615, 807,
+       632, 818,
+       662, 832,
+       669, 845,
+       676, 856,
+       699, 869,
+       731, 877,
+       741, 885,
+       744, 921,
+       745, 922,
+       782, 932,
+       785, 935,
+       790, 941,
+       796, 947,
+       799, 951,
+       814, 962,
+       815, 963,
+       816, 964,
+       820, 968,
+       828, 975,
+       829, 976,
+       831, 983,
+       868, 1021,
+       872, 1026,
+       889, 1040,
+       891, 1042,
+       893, 1045,
+       899, 1051,
+       924, 1069,
+       934, 1078,
+       942, 1087,
+       945, 1089,
+       948, 1091,
+       952, 1094,
+       966, 1141,
+       977, 1152,
+       985, 1159,
+       994, 1170,
+       998, 1172,
+       999, 1173,
+       1028, 1197,
+       1029, 1198,
+       1054, 1211,
+       1068, 1224,
+       1074, 1227,
+       1075, 1228,
+       1079, 1231,
+       1093, 1244,
+       1100, 1249,
+       1101, 1250,
+       1103, 1252,
+       1104, 1253,
+       1105, 1254,
+       1106, 1255,
+       1125, 1275,
+       1150, 1311,
+       1191, 1369,
+       1196, 1373,
+       1203, 1377,
+       1204, 1378,
+       1206, 1379,
+       1209, 1384,
+       1225, 1394,
+       1236, 1400,
+       1241, 1401,
+       1260, 1417,
+       1276, 1424,
+       1277, 1426,
+       1278, 1427,
+       1279, 1428,
+       1280, 1429,
+       1281, 1430,
+       1282, 1431,
+       1283, 1432,
+       1284, 1433,
+       1285, 1434,
+       1286, 1435,
+       1287, 1436,
+       1288, 1437,
+       1289, 1438,
+       1290, 1439,
+       1291, 1440,
+       1292, 1441,
+       1293, 1442,
+       1294, 1443,
+       1295, 1444,
+       1296, 1445,
+       1297, 1446,
+       1298, 1447,
+       1308, 1456,
+       1309, 1457,
+       1312, 1459,
+       1334, 1482,
+       1359, 1493,
+       1360, 1494,
+       1375, 1499,
+       1376, 1500,
+       1402, 1522,
+       1408, 1525,
+       1410, 1526,
+       1411, 1527,
+       1419, 1533,
+       1425, 1537,
+       1455, 1570,
+       1460, 1572,
+       1466, 1576,
+       1469, 1580,
+       1474, 832,
+       1476, 832,
+       1477, 1589,
+       1488, 1601,
+       1497, 1610,
+       1503, 1616,
+       1518, 1626,
+       1520, 1627,
+       1530, 1633,
+       1562, 1639,
+       1574, 1647,
+       1577, 1648,
+       1582, 832,
+       1585, 832,
+       1588, 832,
+       1608, 1689,
+       1611, 1691,
+       1631, 1701,
+       1694, 1766,
+       1707, 1773,
+       1708, 1774,
+       1712, 1776,
+       1716, 1779,
+       1718, 1780,
+       1734, 1793,
+       1768, 1818,
+       1823, 1863,
+       1824, 1864,
+       1827, 1866,
+       1828, 1867,
+       1829, 1868,
+       1861, 1883,
+       1884, 1894,
+       1888, 1896
 };
 static int parser_goto_row119[] = {
-       13,
-       -1, 407,
-       406, 579,
-       410, 582,
-       581, 755,
-       896, 579,
-       898, 582,
-       1031, 755,
-       1388, 579,
-       1396, 582,
-       1502, 755,
-       1627, 579,
-       1629, 582,
-       1692, 755
+       4,
+       -1, 15,
+       22, 106,
+       25, 106,
+       165, 106
 };
 static int parser_goto_row120[] = {
-       5,
-       -1, 408,
-       747, 897,
-       1253, 1389,
-       1540, 1389,
-       1564, 1628
+       1,
+       -1, 16
 };
 static int parser_goto_row121[] = {
-       1,
-       -1, 1448
+       4,
+       -1, 982,
+       1587, 1662,
+       1652, 1724,
+       1663, 1744
 };
 static int parser_goto_row122[] = {
-       2,
-       -1, 1056,
-       1788, 1809
+       13,
+       -1, 442,
+       441, 624,
+       445, 627,
+       626, 813,
+       955, 624,
+       957, 627,
+       1099, 813,
+       1349, 624,
+       1357, 627,
+       1492, 813,
+       1677, 624,
+       1679, 627,
+       1756, 813
 };
 static int parser_goto_row123[] = {
-       1,
-       -1, 1057
+       5,
+       -1, 443,
+       805, 956,
+       1166, 1350,
+       1601, 1678,
+       1645, 1350
 };
 static int parser_goto_row124[] = {
-       6,
-       -1, 1058,
-       1176, 1310,
-       1322, 1440,
-       1324, 1442,
-       1325, 1443,
-       1441, 1530
+       1,
+       -1, 1542
 };
 static int parser_goto_row125[] = {
-       1,
-       -1, 1059
+       2,
+       -1, 1125,
+       1883, 1893
 };
 static int parser_goto_row126[] = {
-       10,
-       -1, 1060,
-       1326, 1444,
-       1327, 1445,
-       1331, 1451,
-       1332, 1452,
-       1333, 1453,
-       1334, 1454,
-       1335, 1455,
-       1336, 1456,
-       1337, 1457
+       1,
+       -1, 1126
 };
 static int parser_goto_row127[] = {
-       3,
-       -1, 1061,
-       1329, 1449,
-       1330, 1450
+       6,
+       -1, 1127,
+       1253, 1412,
+       1424, 1536,
+       1426, 1538,
+       1427, 1539,
+       1537, 1635
 };
 static int parser_goto_row128[] = {
-       5,
-       -1, 1062,
-       1338, 1458,
-       1339, 1459,
-       1340, 1460,
-       1341, 1461
+       1,
+       -1, 1128
 };
 static int parser_goto_row129[] = {
-       4,
-       -1, 1063,
-       1044, 1186,
-       1045, 1187,
-       1178, 1314
+       8,
+       -1, 1129,
+       1430, 1544,
+       1431, 1545,
+       1432, 1546,
+       1433, 1547,
+       1434, 1548,
+       1435, 1549,
+       1436, 1550
 };
 static int parser_goto_row130[] = {
-       1,
-       -1, 1064
+       2,
+       -1, 1130,
+       1429, 1543
 };
 static int parser_goto_row131[] = {
        2,
-       -1, 1065,
-       1043, 1185
+       -1, 1131,
+       1437, 1551
 };
 static int parser_goto_row132[] = {
-       1,
-       -1, 1066
+       2,
+       -1, 1132,
+       1438, 1552
 };
 static int parser_goto_row133[] = {
-       4,
-       -1, 358,
-       257, 470,
-       319, 516,
-       472, 651
+       3,
+       -1, 1133,
+       1439, 1553,
+       1440, 1554
 };
 static int parser_goto_row134[] = {
-       1,
-       -1, -1
+       3,
+       -1, 1134,
+       1441, 1555,
+       1442, 1556
 };
 static int parser_goto_row135[] = {
-       1,
-       -1, 1390
+       5,
+       -1, 1135,
+       1443, 1557,
+       1444, 1558,
+       1445, 1559,
+       1446, 1560
 };
 static int parser_goto_row136[] = {
-       4,
-       -1, 131,
-       1253, 1391,
-       1505, 1572,
-       1540, 1391
+       5,
+       -1, 1136,
+       1112, 1263,
+       1113, 1264,
+       1114, 1265,
+       1255, 1416
 };
 static int parser_goto_row137[] = {
        1,
-       -1, 132
+       -1, 1137
 };
 static int parser_goto_row138[] = {
-       6,
-       -1, 133,
-       256, 469,
-       480, 655,
-       482, 657,
-       483, 658,
-       656, 816
+       2,
+       -1, 1138,
+       1111, 1262
 };
 static int parser_goto_row139[] = {
        1,
-       -1, 134
+       -1, -1
 };
 static int parser_goto_row140[] = {
-       10,
-       -1, 135,
-       484, 659,
-       485, 660,
-       489, 664,
-       490, 665,
-       491, 666,
-       492, 667,
-       493, 668,
-       494, 669,
-       495, 670
+       1,
+       -1, 1139
 };
 static int parser_goto_row141[] = {
-       3,
-       -1, 136,
-       487, 662,
-       488, 663
+       4,
+       -1, 389,
+       281, 507,
+       346, 557,
+       509, 701
 };
 static int parser_goto_row142[] = {
-       5,
-       -1, 137,
-       496, 671,
-       497, 672,
-       498, 673,
-       499, 674
+       1,
+       -1, -1
 };
 static int parser_goto_row143[] = {
        1,
-       -1, 138
+       -1, 1351
 };
 static int parser_goto_row144[] = {
-       1,
-       -1, 139
+       4,
+       -1, 141,
+       1166, 1352,
+       1610, 1690,
+       1645, 1352
 };
 static int parser_goto_row145[] = {
-       4,
-       -1, 140,
-       116, 265,
-       1253, 1392,
-       1540, 1392
+       1,
+       -1, 142
 };
 static int parser_goto_row146[] = {
-       2,
-       -1, 141,
-       1017, 1162
+       6,
+       -1, 143,
+       280, 506,
+       519, 707,
+       521, 709,
+       522, 710,
+       708, 875
 };
 static int parser_goto_row147[] = {
        1,
-       -1, 551
+       -1, 144
 };
 static int parser_goto_row148[] = {
-       7,
-       -1, 552,
-       548, 725,
-       1012, 1155,
-       1153, 1295,
-       1293, 1423,
-       1312, 1433,
-       1432, 1527
+       8,
+       -1, 145,
+       525, 713,
+       526, 714,
+       527, 715,
+       528, 716,
+       529, 717,
+       530, 718,
+       531, 719
 };
 static int parser_goto_row149[] = {
-       1,
-       -1, 729
+       2,
+       -1, 146,
+       524, 712
 };
 static int parser_goto_row150[] = {
-       1,
-       -1, -1
+       2,
+       -1, 147,
+       532, 720
 };
 static int parser_goto_row151[] = {
        2,
-       -1, 1393,
-       1540, 1597
+       -1, 148,
+       533, 721
 };
 static int parser_goto_row152[] = {
-       1,
-       -1, 1394
+       3,
+       -1, 149,
+       534, 722,
+       535, 723
 };
 static int parser_goto_row153[] = {
-       2,
-       -1, 1313,
-       1315, 1436
+       3,
+       -1, 150,
+       536, 724,
+       537, 725
 };
 static int parser_goto_row154[] = {
-       1,
-       -1, -1
+       5,
+       -1, 151,
+       538, 726,
+       539, 727,
+       540, 728,
+       541, 729
 };
 static int parser_goto_row155[] = {
        1,
-       -1, -1
+       -1, 152
 };
 static int parser_goto_row156[] = {
        1,
-       -1, -1
+       -1, 153
 };
 static int parser_goto_row157[] = {
-       1,
-       -1, -1
+       4,
+       -1, 154,
+       125, 289,
+       1166, 1353,
+       1645, 1353
 };
 static int parser_goto_row158[] = {
        1,
        -1, -1
 };
 static int parser_goto_row159[] = {
-       1,
-       -1, -1
+       2,
+       -1, 155,
+       1085, 1239
 };
 static int parser_goto_row160[] = {
        1,
-       -1, -1
+       -1, 595
 };
 static int parser_goto_row161[] = {
-       1,
-       -1, -1
+       7,
+       -1, 596,
+       592, 783,
+       1080, 1232,
+       1230, 1397,
+       1395, 1519,
+       1414, 1529,
+       1528, 1632
 };
 static int parser_goto_row162[] = {
        1,
-       -1, -1
+       -1, 787
 };
 static int parser_goto_row163[] = {
        1,
        -1, -1
 };
 static int parser_goto_row164[] = {
-       1,
-       -1, -1
+       2,
+       -1, 1354,
+       1645, 1715
 };
 static int parser_goto_row165[] = {
        1,
-       -1, -1
+       -1, 1355
 };
 static int parser_goto_row166[] = {
-       8,
-       -1, 970,
-       833, 976,
-       1133, 1282,
-       1279, 1408,
-       1406, 1509,
-       1411, 1512,
-       1574, 1641,
-       1699, 1748
+       2,
+       -1, 1415,
+       1417, 1532
 };
 static int parser_goto_row167[] = {
-       3,
-       -1, 971,
-       687, 851,
-       1405, 1508
+       1,
+       -1, -1
 };
 static int parser_goto_row168[] = {
        1,
-       -1, 852
+       -1, -1
 };
 static int parser_goto_row169[] = {
        1,
-       -1, 853
+       -1, -1
 };
 static int parser_goto_row170[] = {
        1,
-       -1, 854
+       -1, -1
 };
 static int parser_goto_row171[] = {
        1,
-       -1, 855
+       -1, -1
 };
 static int parser_goto_row172[] = {
        1,
-       -1, 856
+       -1, -1
 };
 static int parser_goto_row173[] = {
        1,
-       -1, 857
+       -1, -1
 };
 static int parser_goto_row174[] = {
        1,
-       -1, 858
+       -1, -1
 };
 static int parser_goto_row175[] = {
        1,
        -1, -1
 };
 static int parser_goto_row176[] = {
-       10,
-       -1, 147,
-       31, 153,
-       688, 861,
-       740, 891,
-       829, 972,
-       833, 977,
-       1291, 1421,
-       1406, 1510,
-       1411, 1513,
-       1699, 1749
+       1,
+       -1, -1
 };
 static int parser_goto_row177[] = {
        1,
@@ -23403,11 +24890,11 @@ static int parser_goto_row177[] = {
 };
 static int parser_goto_row178[] = {
        1,
-       -1, 409
+       -1, -1
 };
 static int parser_goto_row179[] = {
        1,
-       -1, 1395
+       -1, -1
 };
 static int parser_goto_row180[] = {
        1,
@@ -23419,261 +24906,514 @@ static int parser_goto_row181[] = {
 };
 static int parser_goto_row182[] = {
        1,
-       -1, 1253
+       -1, -1
 };
 static int parser_goto_row183[] = {
-       2,
-       -1, 15,
-       4, 22
+       1,
+       -1, -1
 };
 static int parser_goto_row184[] = {
-       4,
-       -1, 16,
-       4, 23,
-       15, 88,
-       22, 102
+       8,
+       -1, 1037,
+       892, 1043,
+       1208, 1383,
+       1380, 1504,
+       1502, 1614,
+       1507, 1617,
+       1692, 1765,
+       1817, 1859
 };
 static int parser_goto_row185[] = {
-       8,
-       -1, 17,
-       4, 24,
-       15, 89,
-       16, 93,
-       22, 103,
-       23, 105,
-       88, 244,
-       102, 250
+       3,
+       -1, 1038,
+       742, 910,
+       1501, 1613
 };
 static int parser_goto_row186[] = {
        1,
-       -1, 1366
+       -1, 911
 };
 static int parser_goto_row187[] = {
        1,
-       -1, 1095
+       -1, 912
 };
 static int parser_goto_row188[] = {
        1,
-       -1, 1233
+       -1, 913
 };
 static int parser_goto_row189[] = {
        1,
-       -1, 1357
+       -1, 914
 };
 static int parser_goto_row190[] = {
        1,
-       -1, 1009
+       -1, 915
 };
 static int parser_goto_row191[] = {
-       3,
-       -1, 222,
-       304, 504,
-       992, 1141
+       1,
+       -1, 916
 };
 static int parser_goto_row192[] = {
        1,
-       -1, 574
+       -1, 917
 };
 static int parser_goto_row193[] = {
        1,
-       -1, 589
+       -1, -1
 };
 static int parser_goto_row194[] = {
-       1,
-       -1, 232
+       10,
+       -1, 161,
+       37, 168,
+       743, 920,
+       798, 950,
+       888, 1039,
+       892, 1044,
+       1393, 1517,
+       1502, 1615,
+       1507, 1618,
+       1817, 1860
 };
 static int parser_goto_row195[] = {
        1,
-       -1, 885
+       -1, -1
 };
 static int parser_goto_row196[] = {
        1,
-       -1, 1225
+       -1, 444
 };
 static int parser_goto_row197[] = {
-       2,
-       -1, 1302,
-       1394, 1500
+       1,
+       -1, 1356
 };
 static int parser_goto_row198[] = {
        1,
-       -1, 815
+       -1, -1
 };
 static int parser_goto_row199[] = {
-       162,
-       -1, 177,
-       12, 81,
-       21, 81,
-       25, 142,
-       27, 81,
-       31, 81,
-       49, 142,
-       92, 81,
-       96, 81,
-       116, 142,
-       146, 81,
-       193, 410,
-       221, 81,
-       234, 142,
-       236, 142,
-       237, 142,
-       238, 142,
-       239, 142,
-       256, 142,
-       355, 81,
-       432, 615,
-       437, 81,
-       439, 624,
-       462, 142,
-       463, 142,
-       480, 142,
-       482, 142,
-       483, 142,
-       484, 142,
-       485, 142,
-       487, 142,
-       488, 142,
-       489, 142,
-       490, 142,
-       491, 142,
-       492, 142,
-       493, 142,
-       494, 142,
-       495, 142,
-       496, 142,
-       497, 142,
-       498, 142,
-       499, 142,
-       500, 680,
-       503, 81,
-       540, 719,
-       544, 81,
-       547, 81,
-       592, 765,
-       593, 765,
-       617, 783,
-       619, 142,
-       621, 142,
-       652, 680,
-       656, 142,
-       683, 81,
-       687, 859,
-       688, 81,
-       694, 719,
-       730, 880,
-       740, 81,
-       747, 898,
-       749, 410,
-       793, 142,
-       794, 142,
-       795, 142,
-       796, 142,
-       811, 957,
-       828, 142,
-       829, 859,
-       831, 81,
-       833, 859,
-       842, 142,
-       850, 81,
-       905, 1067,
-       909, 1070,
-       920, 81,
-       949, 142,
-       950, 142,
-       969, 81,
-       988, 142,
-       989, 142,
-       990, 142,
-       994, 81,
-       995, 142,
-       996, 142,
-       1021, 410,
-       1043, 1067,
-       1044, 1067,
-       1045, 1067,
-       1080, 615,
-       1084, 81,
-       1133, 859,
-       1136, 1288,
-       1145, 142,
-       1146, 142,
-       1176, 1067,
-       1178, 1067,
-       1253, 1396,
-       1279, 859,
-       1281, 81,
-       1285, 142,
-       1286, 142,
-       1291, 81,
-       1298, 410,
-       1322, 1067,
-       1324, 1067,
-       1325, 1067,
-       1326, 1067,
-       1327, 1067,
-       1329, 1067,
-       1330, 1067,
-       1331, 1067,
-       1332, 1067,
-       1333, 1067,
-       1334, 1067,
-       1335, 1067,
-       1336, 1067,
-       1337, 1067,
-       1338, 1067,
-       1339, 1067,
-       1340, 1067,
-       1341, 1067,
-       1342, 1467,
-       1358, 615,
-       1405, 859,
-       1406, 859,
-       1411, 859,
-       1415, 142,
-       1416, 142,
-       1417, 142,
-       1418, 142,
-       1426, 410,
-       1437, 1467,
-       1441, 1067,
-       1473, 615,
-       1482, 615,
-       1484, 615,
-       1486, 615,
-       1492, 410,
-       1505, 142,
-       1518, 142,
-       1519, 142,
-       1528, 1586,
-       1540, 1396,
-       1564, 1629,
-       1574, 859,
-       1605, 81,
-       1609, 81,
-       1652, 410,
-       1657, 81,
-       1665, 81,
-       1666, 81,
-       1669, 81,
-       1674, 81,
-       1677, 81,
-       1699, 859,
-       1713, 81,
-       1720, 81,
-       1725, 81,
-       1730, 81,
-       1788, 1067
+       1,
+       -1, -1
 };
 static int parser_goto_row200[] = {
+       1,
+       -1, 1166
+};
+static int parser_goto_row201[] = {
+       1,
+       -1, 17
+};
+static int parser_goto_row202[] = {
        2,
        -1, 18,
-       13, 82
+       5, 28
 };
-static int parser_goto_row201[] = {
-       3,
+static int parser_goto_row203[] = {
+       4,
        -1, 19,
-       18, 98,
-       82, 242
+       5, 29,
+       18, 94,
+       28, 111
+};
+static int parser_goto_row204[] = {
+       8,
+       -1, 20,
+       5, 30,
+       18, 95,
+       19, 99,
+       28, 112,
+       29, 114,
+       94, 265,
+       111, 274
+};
+static int parser_goto_row205[] = {
+       1,
+       -1, 1471
+};
+static int parser_goto_row206[] = {
+       1,
+       -1, 994
+};
+static int parser_goto_row207[] = {
+       4,
+       -1, 1304,
+       1154, 1319,
+       1727, 1785,
+       1791, 1836
+};
+static int parser_goto_row208[] = {
+       1,
+       -1, 1312
+};
+static int parser_goto_row209[] = {
+       1,
+       -1, 1462
+};
+static int parser_goto_row210[] = {
+       1,
+       -1, 1077
+};
+static int parser_goto_row211[] = {
+       3,
+       -1, 243,
+       331, 546,
+       1060, 1218
+};
+static int parser_goto_row212[] = {
+       1,
+       -1, 618
+};
+static int parser_goto_row213[] = {
+       1,
+       -1, 634
+};
+static int parser_goto_row214[] = {
+       1,
+       -1, 252
+};
+static int parser_goto_row215[] = {
+       1,
+       -1, 944
+};
+static int parser_goto_row216[] = {
+       2,
+       -1, 1404,
+       1355, 1490
+};
+static int parser_goto_row217[] = {
+       1,
+       -1, 874
+};
+static int parser_goto_row218[] = {
+       170,
+       -1, 196,
+       13, 83,
+       27, 83,
+       31, 156,
+       33, 83,
+       37, 83,
+       54, 156,
+       98, 83,
+       125, 156,
+       160, 83,
+       212, 445,
+       242, 83,
+       254, 156,
+       256, 156,
+       257, 156,
+       258, 156,
+       259, 156,
+       280, 156,
+       386, 83,
+       467, 664,
+       472, 83,
+       474, 673,
+       497, 156,
+       498, 156,
+       519, 156,
+       521, 156,
+       522, 156,
+       524, 156,
+       525, 156,
+       526, 156,
+       527, 156,
+       528, 156,
+       529, 156,
+       530, 156,
+       531, 156,
+       532, 156,
+       533, 156,
+       534, 156,
+       535, 156,
+       536, 156,
+       537, 156,
+       538, 156,
+       539, 156,
+       540, 156,
+       541, 156,
+       542, 735,
+       545, 83,
+       584, 777,
+       588, 83,
+       591, 83,
+       637, 823,
+       638, 823,
+       666, 841,
+       668, 156,
+       670, 156,
+       702, 735,
+       708, 156,
+       738, 83,
+       742, 918,
+       743, 83,
+       749, 777,
+       788, 939,
+       798, 83,
+       805, 957,
+       807, 445,
+       851, 156,
+       852, 156,
+       853, 156,
+       854, 156,
+       869, 1024,
+       887, 156,
+       888, 918,
+       890, 83,
+       892, 918,
+       901, 156,
+       909, 83,
+       964, 1140,
+       968, 1143,
+       979, 83,
+       1016, 156,
+       1017, 156,
+       1036, 83,
+       1055, 156,
+       1056, 156,
+       1057, 156,
+       1058, 83,
+       1062, 83,
+       1063, 156,
+       1064, 156,
+       1089, 445,
+       1111, 1140,
+       1112, 1140,
+       1113, 1140,
+       1114, 1140,
+       1152, 664,
+       1156, 83,
+       1166, 1357,
+       1208, 918,
+       1211, 1389,
+       1216, 83,
+       1222, 156,
+       1223, 156,
+       1253, 1140,
+       1255, 1140,
+       1380, 918,
+       1382, 83,
+       1386, 156,
+       1387, 156,
+       1393, 83,
+       1400, 445,
+       1424, 1140,
+       1426, 1140,
+       1427, 1140,
+       1429, 1140,
+       1430, 1140,
+       1431, 1140,
+       1432, 1140,
+       1433, 1140,
+       1434, 1140,
+       1435, 1140,
+       1436, 1140,
+       1437, 1140,
+       1438, 1140,
+       1439, 1140,
+       1440, 1140,
+       1441, 1140,
+       1442, 1140,
+       1443, 1140,
+       1444, 1140,
+       1445, 1140,
+       1446, 1140,
+       1447, 1566,
+       1463, 664,
+       1472, 664,
+       1474, 664,
+       1476, 664,
+       1482, 445,
+       1501, 918,
+       1502, 918,
+       1507, 918,
+       1511, 156,
+       1512, 156,
+       1513, 156,
+       1514, 156,
+       1522, 445,
+       1533, 1566,
+       1537, 1140,
+       1572, 664,
+       1601, 1679,
+       1610, 156,
+       1623, 156,
+       1624, 156,
+       1633, 1704,
+       1645, 1357,
+       1655, 83,
+       1659, 83,
+       1692, 918,
+       1721, 83,
+       1729, 83,
+       1730, 83,
+       1733, 83,
+       1738, 83,
+       1741, 83,
+       1776, 445,
+       1782, 83,
+       1789, 83,
+       1794, 83,
+       1799, 83,
+       1817, 918,
+       1883, 1140
+};
+static int parser_goto_row219[] = {
+       78,
+       -1, 164,
+       0, 21,
+       3, 24,
+       5, 21,
+       18, 21,
+       19, 21,
+       20, 24,
+       22, 107,
+       25, 108,
+       28, 21,
+       29, 21,
+       30, 24,
+       33, 24,
+       37, 24,
+       64, 24,
+       94, 21,
+       95, 24,
+       99, 24,
+       104, 24,
+       105, 24,
+       111, 21,
+       112, 24,
+       114, 24,
+       165, 337,
+       243, 24,
+       265, 24,
+       271, 24,
+       274, 24,
+       331, 24,
+       386, 24,
+       546, 24,
+       588, 24,
+       742, 24,
+       743, 24,
+       798, 24,
+       839, 24,
+       888, 24,
+       890, 24,
+       892, 24,
+       979, 24,
+       990, 24,
+       994, 21,
+       1058, 24,
+       1060, 24,
+       1062, 24,
+       1145, 24,
+       1154, 24,
+       1156, 24,
+       1208, 24,
+       1216, 24,
+       1218, 24,
+       1304, 24,
+       1319, 24,
+       1380, 24,
+       1393, 24,
+       1468, 24,
+       1501, 24,
+       1502, 24,
+       1507, 24,
+       1579, 24,
+       1655, 24,
+       1659, 24,
+       1692, 24,
+       1721, 24,
+       1727, 24,
+       1729, 24,
+       1730, 24,
+       1733, 24,
+       1738, 24,
+       1741, 24,
+       1782, 24,
+       1785, 24,
+       1789, 24,
+       1791, 24,
+       1794, 24,
+       1799, 24,
+       1817, 24,
+       1836, 24
+};
+static int parser_goto_row220[] = {
+       75,
+       -1, 165,
+       0, 22,
+       3, 25,
+       5, 22,
+       18, 22,
+       19, 22,
+       20, 25,
+       28, 22,
+       29, 22,
+       30, 25,
+       33, 25,
+       37, 25,
+       64, 25,
+       94, 22,
+       95, 25,
+       99, 25,
+       104, 25,
+       105, 25,
+       111, 22,
+       112, 25,
+       114, 25,
+       243, 25,
+       265, 25,
+       271, 25,
+       274, 25,
+       331, 25,
+       386, 25,
+       546, 25,
+       588, 25,
+       742, 25,
+       743, 25,
+       798, 25,
+       839, 25,
+       888, 25,
+       890, 25,
+       892, 25,
+       979, 25,
+       990, 25,
+       994, 22,
+       1058, 25,
+       1060, 25,
+       1062, 25,
+       1145, 25,
+       1154, 25,
+       1156, 25,
+       1208, 25,
+       1216, 25,
+       1218, 25,
+       1304, 25,
+       1319, 25,
+       1380, 25,
+       1393, 25,
+       1468, 25,
+       1501, 25,
+       1502, 25,
+       1507, 25,
+       1579, 25,
+       1655, 25,
+       1659, 25,
+       1692, 25,
+       1721, 25,
+       1727, 25,
+       1729, 25,
+       1730, 25,
+       1733, 25,
+       1738, 25,
+       1741, 25,
+       1782, 25,
+       1785, 25,
+       1789, 25,
+       1791, 25,
+       1794, 25,
+       1799, 25,
+       1817, 25,
+       1836, 25
 };
 
 const int* const parser_goto_table[] = {
@@ -23877,5 +25617,24 @@ const int* const parser_goto_table[] = {
        parser_goto_row198,
        parser_goto_row199,
        parser_goto_row200,
-       parser_goto_row201
+       parser_goto_row201,
+       parser_goto_row202,
+       parser_goto_row203,
+       parser_goto_row204,
+       parser_goto_row205,
+       parser_goto_row206,
+       parser_goto_row207,
+       parser_goto_row208,
+       parser_goto_row209,
+       parser_goto_row210,
+       parser_goto_row211,
+       parser_goto_row212,
+       parser_goto_row213,
+       parser_goto_row214,
+       parser_goto_row215,
+       parser_goto_row216,
+       parser_goto_row217,
+       parser_goto_row218,
+       parser_goto_row219,
+       parser_goto_row220
 };
index 2958c4b..a543672 100644 (file)
@@ -197,8 +197,7 @@ $(call import-module,android/native_app_glue)
                android:label="@string/app_name"
                android:hasCode="true"
                android:debuggable="{{{not release}}}"
-               {{{icon_declaration}}}
-               android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation">
+               {{{icon_declaration}}}>
 """
 
                for activity in project.activities do
index 963ba76..e4d848d 100644 (file)
@@ -99,7 +99,20 @@ class PrettyPrinterVisitor
                n.accept_pretty_printer self
        end
 
-       # Visit a list of `Anode`.
+       # Visit a list of arguments `ANode` with optional parentheses
+       fun visit_args(n: nullable ANodes[ANode]) do
+               if n == null or n.is_empty then return
+               if current_token isa TOpar then
+                       consume "("
+               else
+                       adds
+               end
+
+               visit_list n
+               if current_token isa TCpar then consume ")"
+       end
+
+       # Visit a list of `ANode`.
        fun visit_list(n: nullable ANodes[ANode]) do
                if n == null then return
                n.accept_pretty_printer self
@@ -108,10 +121,11 @@ class PrettyPrinterVisitor
        # Is the node inlinable and can fit on the line.
        fun can_inline(n: nullable ANode): Bool do
                if n == null then return true
+               if no_inline and n.location.line_start != n.location.line_end then return false
                if n.must_be_inline then return true
                if n.must_be_block then return false
                # check length
-               if n.collect_length + current_length > max_size then return false
+               if max_size > 0 and n.collect_length + current_length > max_size then return false
                # check block is inlinable
                return n.is_inlinable
        end
@@ -145,12 +159,22 @@ class PrettyPrinterVisitor
        # Skip `current_token` until `target` is reached.
        fun skip_to(target: nullable Token) do
                if target == null then return
-               while current_token != target do skip
+               while current_token != null and current_token != target do skip
+               if current_token == null then
+                       target.debug("Looked for, but not found :(")
+                       abort
+               end
+       end
+
+       # Consume comments and end of lines if any
+       fun consume_comments do
+               while current_token isa TEol or current_token isa TComment do visit current_token
        end
 
        # Visit `current_token`.
        fun consume(token: String) do
-               assert current_token.text == token
+               consume_comments
+               if current_token.text == token then else current_token.debug("Got `{current_token.text}`; expected `{token}`.")
                visit current_token
        end
 
@@ -196,7 +220,8 @@ class PrettyPrinterVisitor
        var tab_size = 8
 
        # Max line size.
-       var max_size = 80
+       # 0 (or negative) to disable.
+       var max_size = 80 is writable
 
        # Length of the current line.
        var current_length = 0
@@ -260,6 +285,9 @@ class PrettyPrinterVisitor
 
        # Do we force the deletion of empty lines?
        var skip_empty = false is public writable
+
+       # Disable automatic inlining.
+       var no_inline = false is writable
 end
 
 # Base framework redefs
@@ -269,6 +297,8 @@ redef class ANodes[E]
                for e in self do
                        var e_can_inline = v.can_inline(e)
 
+                       if v.current_token isa TComma then v.skip
+
                        if e != first then
                                if not e_can_inline then
                                        v.add ","
@@ -509,15 +539,7 @@ redef class AAnnotation
                        v.adds
                end
                v.visit n_atid
-               if not n_args.is_empty then
-                       if n_opar == null then
-                               v.adds
-                       else
-                               v.visit n_opar
-                       end
-                       v.visit_list n_args
-                       v.visit n_cpar
-               end
+               v.visit_args n_args
        end
 end
 
@@ -1041,7 +1063,7 @@ redef class AExternCalls
                        v.adds
                        v.visit_list n_extern_calls
                else
-                       v.addn
+                       v.forcen
                        v.indent += 1
                        v.addt
                        v.indent -= 1
@@ -1141,7 +1163,7 @@ redef class TExternCodeSegment
                                v.add "`\{"
 
                                if not lines.first.trim.is_empty then
-                                       v.addn
+                                       v.forcen
                                        lines.first.l_trim
                                        v.indent += 1
                                        v.addt
@@ -1218,7 +1240,7 @@ redef class AIfExpr
                        v.adds
                else
                        v.visit n_expr
-                       v.addn
+                       v.forcen
                        v.addt
                end
 
@@ -1269,10 +1291,11 @@ redef class AIfExpr
                                end
                        end
 
-                       if has_else(v) then
-                               while not v.current_token isa TKwelse do
-                                       v.consume v.current_token.text
-                               end
+                       v.consume_comments
+
+                       # FIXME: for some unknown reasons, has_else can be true even if
+                       # there is no `else` keyword but a `end` instead.
+                       if has_else(v) and v.current_token isa TKwelse then
 
                                v.indent -= 1
                                v.addt
@@ -1559,7 +1582,7 @@ redef class ACallExpr
                v.visit_recv n_expr
 
                if not n_expr isa AImplicitSelfExpr and not can_inline then
-                       v.addn
+                       v.forcen
                        v.addt
                end
 
@@ -1572,14 +1595,7 @@ redef class ACallExpr
                                v.visit n_args.n_exprs.first
                                if v.current_token isa TCpar then v.skip
                        else
-                               if v.current_token isa TOpar then
-                                       v.consume "("
-                               else
-                                       v.adds
-                               end
-
-                               v.visit_list n_args.n_exprs
-                               if v.current_token isa TCpar then v.consume ")"
+                               v.visit_args n_args.n_exprs
                        end
                end
        end
@@ -1700,12 +1716,7 @@ redef class AInitExpr
                end
 
                v.visit n_kwinit
-
-               if not n_args.n_exprs.is_empty then
-                       v.consume "("
-                       v.visit_list n_args.n_exprs
-                       v.consume ")"
-               end
+               v.visit_args n_args.n_exprs
        end
 end
 
@@ -1720,7 +1731,7 @@ redef class ANewExpr
                        v.consume "."
 
                        if not can_inline then
-                               v.addn
+                               v.forcen
                                v.indent += 1
                                v.addt
                                v.indent -= 1
@@ -1729,11 +1740,7 @@ redef class ANewExpr
                        v.visit n_id
                end
 
-               if not n_args.n_exprs.is_empty then
-                       v.consume "("
-                       v.visit_list n_args.n_exprs
-                       v.consume ")"
-               end
+               v.visit_args n_args.n_exprs
        end
 
        redef fun is_inlinable do return true
@@ -1842,7 +1849,7 @@ redef class AAssertExpr
                                else
                                        v.addt
                                        v.visit n_else
-                                       v.addn
+                                       v.forcen
                                        v.indent -= 1
                                        v.addt
                                        v.add "end"
@@ -1880,14 +1887,7 @@ redef class ASuperExpr
                                v.visit n_args.n_exprs.first
                                if v.current_token isa TCpar then v.skip
                        else
-                               if v.current_token isa TOpar then
-                                       v.consume "("
-                               else
-                                       v.adds
-                               end
-
-                               v.visit_list n_args.n_exprs
-                               if v.current_token isa TCpar then v.consume ")"
+                               v.visit_args n_args.n_exprs
                        end
                end
        end
@@ -1977,7 +1977,7 @@ private class ABinOpHelper
                        v.adds
                        v.visit bin_expr2
                else
-                       v.addn
+                       v.forcen
                        v.indent += 1
                        v.addt
                        v.indent -= 1
@@ -2044,16 +2044,9 @@ end
 
 # Syntax
 
-redef class AUplusExpr
+redef class AUnaryopExpr
        redef fun accept_pretty_printer(v) do
-               v.consume "+"
-               v.visit n_expr
-       end
-end
-
-redef class AUminusExpr
-       redef fun accept_pretty_printer(v) do
-               v.consume "-"
+               v.visit n_op
                v.visit n_expr
        end
 end
@@ -2075,6 +2068,11 @@ redef class AArrayExpr
        redef fun accept_pretty_printer(v) do
                v.consume "["
                v.visit_list n_exprs
+               if n_type != null then
+                       v.consume ":"
+                       v.adds
+                       v.visit n_type
+               end
                v.consume "]"
        end
 end
@@ -2118,7 +2116,7 @@ redef class AStringFormExpr
                        while i < text.length do
                                v.add text[i].to_s
 
-                               if v.current_length >= v.max_size and i <= text.length - 3 then
+                               if v.max_size > 0 and v.current_length >= v.max_size and i <= text.length - 3 then
                                        v.add "\" +"
                                        if was_inline then
                                                v.forcen
index e798ab2..c26ca0f 100644 (file)
@@ -427,9 +427,39 @@ private class TypeVisitor
                var map = new SignatureMap
 
                var setted = args.length - msignature.min_arity
+
+               # First, handle named arguments
+               for i in [0..args.length[ do
+                       var e = args[i]
+                       if not e isa ANamedargExpr then continue
+                       var name = e.n_id.text
+                       var param = msignature.mparameter_by_name(name)
+                       if param == null then
+                               modelbuilder.error(e.n_id, "Error: no parameter `{name}` for `{mproperty}{msignature}`.")
+                               return null
+                       end
+                       if not param.is_default then
+                               modelbuilder.error(e, "Error: parameter `{name}` is not optional for `{mproperty}{msignature}`.")
+                               return null
+                       end
+                       var idx = msignature.mparameters.index_of(param)
+                       var prev = map.map.get_or_null(idx)
+                       if prev != null then
+                               modelbuilder.error(e, "Error: parameter `{name}` already associated with argument #{prev} for `{mproperty}{msignature}`.")
+                               return null
+                       end
+                       map.map[idx] = i
+                       setted -= 1
+                       e.mtype = self.visit_expr_subtype(e.n_expr, param.mtype)
+               end
+
+               # Second, associate remaining parameters
                var vararg_decl = args.length - msignature.arity
                var j = 0
                for i in [0..msignature.arity[ do
+                       # Skip parameters associated by name
+                       if map.map.has_key(i) then continue
+
                        var param = msignature.mparameters[i]
                        if param.is_default then
                                if setted > 0 then
@@ -438,6 +468,9 @@ private class TypeVisitor
                                        continue
                                end
                        end
+
+                       # Search the next free argument: skip named arguments since they are already associated
+                       while args[j] isa ANamedargExpr do j += 1
                        var arg = args[j]
                        map.map[i] = j
                        j += 1
@@ -450,15 +483,31 @@ private class TypeVisitor
                        var paramtype = param.mtype
                        self.visit_expr_subtype(arg, paramtype)
                end
+
+               # Third, check varargs
                if vararg_rank >= 0 then
                        var paramtype = msignature.mparameters[vararg_rank].mtype
                        var first = args[vararg_rank]
-                       if vararg_decl == 0 and first isa AVarargExpr then
+                       if vararg_decl == 0 then
                                var mclass = get_mclass(node, "Array")
                                if mclass == null then return null # Forward error
                                var array_mtype = mclass.get_mtype([paramtype])
-                               self.visit_expr_subtype(first.n_expr, array_mtype)
-                               first.mtype  = first.n_expr.mtype
+                               if first isa AVarargExpr then
+                                       self.visit_expr_subtype(first.n_expr, array_mtype)
+                                       first.mtype  = first.n_expr.mtype
+                               else
+                                       # only one vararg, maybe `...` was forgot, so be gentle!
+                                       var t = visit_expr(first)
+                                       if t == null then return null # Forward error
+                                       if not is_subtype(t, paramtype) and is_subtype(t, array_mtype) then
+                                               # Not acceptable but could be a `...`
+                                               error(first, "Type Error: expected `{paramtype}`, got `{t}`. Is an ellipsis `...` missing on the argument?")
+                                               return null
+                                       end
+                                       # Standard valid vararg, finish the job
+                                       map.vararg_decl = 1
+                                       self.visit_expr_subtype(first, paramtype)
+                               end
                        else
                                map.vararg_decl = vararg_decl + 1
                                for i in [vararg_rank..vararg_rank+vararg_decl] do
@@ -1641,13 +1690,8 @@ redef class ANeExpr
        end
 end
 
-redef class AUplusExpr
-       redef fun property_name do return "unary +"
-       redef fun compute_raw_arguments do return new Array[AExpr]
-end
-
-redef class AUminusExpr
-       redef fun property_name do return "unary -"
+redef class AUnaryopExpr
+       redef fun property_name do return "unary {operator}"
        redef fun compute_raw_arguments do return new Array[AExpr]
 end
 
index 4fa28c0..ebe2c73 100644 (file)
@@ -26,7 +26,7 @@ redef class ToolContext
        var transform_phase: Phase = new TransformPhase(self, [typing_phase, auto_super_init_phase])
 
        # --no-shortcut-range
-       var opt_no_shortcut_range: OptionBool = new OptionBool("Always insantiate a range and its iterator on 'for' loops", "--no-shortcut-range")
+       var opt_no_shortcut_range: OptionBool = new OptionBool("Always instantiate a range and its iterator on 'for' loops", "--no-shortcut-range")
 
        redef init
        do
diff --git a/tests/base_arg_named.nit b/tests/base_arg_named.nit
new file mode 100644 (file)
index 0000000..a584add
--- /dev/null
@@ -0,0 +1,46 @@
+# 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.
+
+import base_arg_default
+
+var a = new A
+a.foo(a=1,b=2,3,4,e=5,f=6)
+a.foo(f=6,3,e=5,b=2,4,a=1)
+a.foo(3,e=5,b=2,4)
+
+a.bar
+
+a.bar(a=1)
+a.bar(2,a=1)
+a.bar(2,a=1,3)
+a.bar(b=2)
+a.bar(1,b=2)
+a.bar(1,b=2,3)
+a.bar(c=3)
+a.bar(1,c=3)
+a.bar(1,c=3,2)
+
+a.bar(a=1,b=2)
+a.bar(a=1,3,b=2)
+a.bar(a=1,c=3)
+a.bar(a=1,2,c=3)
+a.bar(b=2,c=3)
+a.bar(b=2,1,c=3)
+
+a.bar(b=2,a=1,c=3)
+
+#alt1#a.bar(2,a=1,3, 4)
+#alt1#a.bar(fail=1)
+#alt1#a.bar(a=1,a=1)
+#alt1#a.foo(c=1,d=1)
diff --git a/tests/base_arg_named_inherit.nit b/tests/base_arg_named_inherit.nit
new file mode 100644 (file)
index 0000000..22f62f0
--- /dev/null
@@ -0,0 +1,34 @@
+# 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.
+
+import base_arg_default
+
+class B
+       super A
+       redef fun foo(x,y,z,t,u,v) do super
+end
+
+#alt2#redef class A
+#alt2# redef fun foo(x,y,z,t,u,v) do super
+#alt2#end
+
+var a = new A #alt1# var a = new B
+a.foo(a=1,b=2,3,4,e=5,f=6)
+a.foo(f=6,3,e=5,b=2,4,a=1)
+a.foo(3,e=5,b=2,4)
+
+var b = new B #alt1# var b = new A
+b.foo(x=1,y=2,3,4,u=5,v=6)
+b.foo(v=6,3,u=5,y=2,4,x=1)
+b.foo(3,u=5,y=2,4)
diff --git a/tests/base_arg_order.nit b/tests/base_arg_order.nit
new file mode 100644 (file)
index 0000000..a948eeb
--- /dev/null
@@ -0,0 +1,42 @@
+# 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.
+
+import base_arg_default
+import standard::collection::array
+
+fun order(i: Int): Int do
+       '>'.output
+       i.output
+       return i
+end
+
+fun bar(a: Int, bs: Int..., c: Int)
+do
+       a.output
+       for b in bs do
+               ' '.output
+               b.output
+       end
+       c.output
+end
+
+var a = new A
+a.foo(order(1),order(2),order(3),order(4),order(5),order(6))
+a.foo(a=order(1),b=order(2),order(3),order(4),e=order(5),f=order(6))
+a.foo(f=order(6),order(3),e=order(5),b=order(2),order(4),a=order(1))
+a.foo(order(3),e=order(5),b=order(2),order(4))
+a.foo(order(3),order(4))
+
+bar(order(1),order(2),order(3))
+bar(order(1),order(2),order(3),order(4))
diff --git a/tests/base_attr_abstract2.nit b/tests/base_attr_abstract2.nit
new file mode 100644 (file)
index 0000000..931f334
--- /dev/null
@@ -0,0 +1,28 @@
+# 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.
+
+import standard::kernel
+
+abstract class A
+       var x: Int
+       var y: Int is abstract
+end
+
+class B
+       super A
+       redef fun y=(v) do v.output
+end
+
+var b = new B(1,2)
+b.x.output
similarity index 75%
rename from tests/test_operators.nit
rename to tests/base_operators.nit
index d828220..e993cc9 100644 (file)
@@ -1,7 +1,5 @@
 # This file is part of NIT ( http://www.nitlanguage.org ).
 #
-# Copyright 2004-2008 Jean Privat <jean@pryen.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
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import standard::kernel
 
 class A
+   fun +: A
+   do
+          0.output
+          return self
+   end
    fun +(a: A): A
    do
           2.output
@@ -86,6 +90,31 @@ class A
           15.output
           return a
    end
+   fun **(a: A): A
+   do
+          16.output
+          return a
+   end
+   fun |(a: A): A
+   do
+          16.output
+          return a
+   end
+   fun ^(a: A): A
+   do
+          17.output
+          return a
+   end
+   fun &(a: A): A
+   do
+          18.output
+          return a
+   end
+   fun ~: A
+   do
+          19.output
+          return self
+   end
 
    init do end
 end
@@ -94,6 +123,21 @@ var a = new A
 var a2 = new A
 var b : Bool
 var i: Int
-a = a + -a - a * a / a % a >> a << a
+
+a = +a + -a - a * a / a % a >> a << a ** a | ~a ^ a & a
 b = a == a2 and a < a and a > a and a <= a and a >= a
 i = a <=> a
+
+'\n'.output
+
+a += a
+a -= a
+a *= a
+a /= a
+a %= a
+a **= a
+a <<= a
+a >>= a
+a |= a
+a ^= a
+a &= a
diff --git a/tests/base_primitive_recv.nit b/tests/base_primitive_recv.nit
new file mode 100644 (file)
index 0000000..a409bd5
--- /dev/null
@@ -0,0 +1,39 @@
+# 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.
+
+import standard::kernel
+
+
+redef class Int
+       fun foo do self.output
+end
+
+fun bar(i: nullable Int) do i.foo
+
+redef class Float
+       fun foo do self.output
+end
+
+fun baz(i: nullable Float) do i.foo
+
+bar(1)
+baz(1.0)
+
+var a: nullable Object
+
+a = 1
+a.foo
+
+a = 1.0
+a.foo
index 00b15c0..d1aa228 100644 (file)
@@ -1 +1 @@
-&
\ No newline at end of file
+`&
index b4d2b33..49599a2 100644 (file)
@@ -3,3 +3,4 @@ leapfrog_curses
 websocket_server
 converter
 show_basedir
+langannot
diff --git a/tests/sav/balanced_brackets.res b/tests/sav/balanced_brackets.res
new file mode 100644 (file)
index 0000000..ea08659
--- /dev/null
@@ -0,0 +1,10 @@
+][[]][ is not well-balanced
+[[]][] is well-balanced
+[]][][ is not well-balanced
+[[[]]] is well-balanced
+[][]][ is not well-balanced
+]][[][ is not well-balanced
+[]]][[ is not well-balanced
+[]][][ is not well-balanced
+[][][] is well-balanced
+][]][[ is not well-balanced
diff --git a/tests/sav/base_arg_named.res b/tests/sav/base_arg_named.res
new file mode 100644 (file)
index 0000000..be2e49f
--- /dev/null
@@ -0,0 +1,89 @@
+1
+2
+3
+4
+5
+6
+-
+1
+2
+3
+4
+5
+6
+-
+
+2
+3
+4
+5
+
+-
+
+
+
+-
+1
+
+
+-
+1
+2
+
+-
+1
+2
+3
+-
+
+2
+
+-
+1
+2
+
+-
+1
+2
+3
+-
+
+
+3
+-
+1
+
+3
+-
+1
+2
+3
+-
+1
+2
+
+-
+1
+2
+3
+-
+1
+
+3
+-
+1
+2
+3
+-
+
+2
+3
+-
+1
+2
+3
+-
+1
+2
+3
+-
diff --git a/tests/sav/base_arg_named_alt1.res b/tests/sav/base_arg_named_alt1.res
new file mode 100644 (file)
index 0000000..f41b60a
--- /dev/null
@@ -0,0 +1,4 @@
+alt/base_arg_named_alt1.nit:43,3--5: Error: expected at most 3 argument(s) for `bar(a: nullable Int, b: nullable Int, c: nullable Int)`; got 4. See introduction at `base_arg_default::A::bar`.
+alt/base_arg_named_alt1.nit:44,7--10: Error: no parameter `fail` for `bar(a: nullable Int, b: nullable Int, c: nullable Int)`.
+alt/base_arg_named_alt1.nit:45,11--13: Error: parameter `a` already associated with argument #0 for `bar(a: nullable Int, b: nullable Int, c: nullable Int)`.
+alt/base_arg_named_alt1.nit:46,7--9: Error: parameter `c` is not optional for `foo(a: nullable Int, b: nullable Int, c: Int, d: Int, e: nullable Int, f: nullable Int)`.
diff --git a/tests/sav/base_arg_named_inherit.res b/tests/sav/base_arg_named_inherit.res
new file mode 100644 (file)
index 0000000..17a46de
--- /dev/null
@@ -0,0 +1,42 @@
+1
+2
+3
+4
+5
+6
+-
+1
+2
+3
+4
+5
+6
+-
+
+2
+3
+4
+5
+
+-
+1
+2
+3
+4
+5
+6
+-
+1
+2
+3
+4
+5
+6
+-
+
+2
+3
+4
+5
+
+-
diff --git a/tests/sav/base_arg_named_inherit_alt1.res b/tests/sav/base_arg_named_inherit_alt1.res
new file mode 100644 (file)
index 0000000..aa69f50
--- /dev/null
@@ -0,0 +1,6 @@
+alt/base_arg_named_inherit_alt1.nit:27,7: Error: no parameter `a` for `foo(x: nullable Int, y: nullable Int, z: Int, t: Int, u: nullable Int, v: nullable Int)`.
+alt/base_arg_named_inherit_alt1.nit:28,7: Error: no parameter `f` for `foo(x: nullable Int, y: nullable Int, z: Int, t: Int, u: nullable Int, v: nullable Int)`.
+alt/base_arg_named_inherit_alt1.nit:29,9: Error: no parameter `e` for `foo(x: nullable Int, y: nullable Int, z: Int, t: Int, u: nullable Int, v: nullable Int)`.
+alt/base_arg_named_inherit_alt1.nit:32,7: Error: no parameter `x` for `foo(a: nullable Int, b: nullable Int, c: Int, d: Int, e: nullable Int, f: nullable Int)`.
+alt/base_arg_named_inherit_alt1.nit:33,7: Error: no parameter `v` for `foo(a: nullable Int, b: nullable Int, c: Int, d: Int, e: nullable Int, f: nullable Int)`.
+alt/base_arg_named_inherit_alt1.nit:34,9: Error: no parameter `u` for `foo(a: nullable Int, b: nullable Int, c: Int, d: Int, e: nullable Int, f: nullable Int)`.
diff --git a/tests/sav/base_arg_named_inherit_alt2.res b/tests/sav/base_arg_named_inherit_alt2.res
new file mode 100644 (file)
index 0000000..2a85022
--- /dev/null
@@ -0,0 +1,3 @@
+alt/base_arg_named_inherit_alt2.nit:27,7: Error: no parameter `a` for `foo(x: nullable Int, y: nullable Int, z: Int, t: Int, u: nullable Int, v: nullable Int)`.
+alt/base_arg_named_inherit_alt2.nit:28,7: Error: no parameter `f` for `foo(x: nullable Int, y: nullable Int, z: Int, t: Int, u: nullable Int, v: nullable Int)`.
+alt/base_arg_named_inherit_alt2.nit:29,9: Error: no parameter `e` for `foo(x: nullable Int, y: nullable Int, z: Int, t: Int, u: nullable Int, v: nullable Int)`.
diff --git a/tests/sav/base_arg_order.res b/tests/sav/base_arg_order.res
new file mode 100644 (file)
index 0000000..b16bf3f
--- /dev/null
@@ -0,0 +1,73 @@
+>1
+>2
+>3
+>4
+>5
+>6
+1
+2
+3
+4
+5
+6
+-
+>1
+>2
+>3
+>4
+>5
+>6
+1
+2
+3
+4
+5
+6
+-
+>6
+>3
+>5
+>2
+>4
+>1
+1
+2
+3
+4
+5
+6
+-
+>3
+>5
+>2
+>4
+
+2
+3
+4
+5
+
+-
+>3
+>4
+
+
+3
+4
+
+
+-
+>1
+>2
+>3
+1
+ 2
+3
+>1
+>2
+>3
+>4
+1
+ 2
+ 3
+4
diff --git a/tests/sav/base_attr_abstract2.res b/tests/sav/base_attr_abstract2.res
new file mode 100644 (file)
index 0000000..5f1d0ec
--- /dev/null
@@ -0,0 +1,2 @@
+2
+1
index 5ff1d37..5865ea3 100644 (file)
@@ -9,22 +9,22 @@ base_formal_subtype.nit:58,10--19: Warning: expression is already a `VE` since i
 base_formal_subtype.nit:59,10--18: Warning: expression is already a `E` since it is a `VVE`.
 base_formal_subtype.nit:60,10--23: Warning: expression is already a `Object` since it is a `VVE`.
 base_formal_subtype.nit:62,10--20: Warning: expression is already a `VGE`.
-base_formal_subtype.nit:63,10--20: Warning: expression is already a `G[E]` since it is a `VGE`.
-base_formal_subtype.nit:64,10--25: Warning: expression is already a `G[Object]` since it is a `VGE`.
+base_formal_subtype.nit:63,10--21: Warning: expression is already a `G[E]` since it is a `VGE`.
+base_formal_subtype.nit:64,10--26: Warning: expression is already a `G[Object]` since it is a `VGE`.
 base_formal_subtype.nit:65,10--23: Warning: expression is already a `Object` since it is a `VGE`.
 base_formal_subtype.nit:67,10--22: Warning: expression is already a `VVGE`.
 base_formal_subtype.nit:68,10--21: Warning: expression is already a `VGE` since it is a `VVGE`.
-base_formal_subtype.nit:69,10--21: Warning: expression is already a `G[E]` since it is a `VVGE`.
-base_formal_subtype.nit:70,10--26: Warning: expression is already a `G[Object]` since it is a `VVGE`.
+base_formal_subtype.nit:69,10--22: Warning: expression is already a `G[E]` since it is a `VVGE`.
+base_formal_subtype.nit:70,10--27: Warning: expression is already a `G[Object]` since it is a `VVGE`.
 base_formal_subtype.nit:71,10--24: Warning: expression is already a `Object` since it is a `VVGE`.
 base_formal_subtype.nit:73,10--22: Warning: expression is already a `VGVE`.
-base_formal_subtype.nit:74,10--22: Warning: expression is already a `G[VE]` since it is a `VGVE`.
-base_formal_subtype.nit:75,10--21: Warning: expression is already a `G[E]` since it is a `VGVE`.
-base_formal_subtype.nit:76,10--26: Warning: expression is already a `G[Object]` since it is a `VGVE`.
+base_formal_subtype.nit:74,10--23: Warning: expression is already a `G[VE]` since it is a `VGVE`.
+base_formal_subtype.nit:75,10--22: Warning: expression is already a `G[E]` since it is a `VGVE`.
+base_formal_subtype.nit:76,10--27: Warning: expression is already a `G[Object]` since it is a `VGVE`.
 base_formal_subtype.nit:77,10--24: Warning: expression is already a `Object` since it is a `VGVE`.
 base_formal_subtype.nit:79,10--24: Warning: expression is already a `VGVVE`.
-base_formal_subtype.nit:80,10--24: Warning: expression is already a `G[VVE]` since it is a `VGVVE`.
-base_formal_subtype.nit:81,10--23: Warning: expression is already a `G[VE]` since it is a `VGVVE`.
-base_formal_subtype.nit:82,10--22: Warning: expression is already a `G[E]` since it is a `VGVVE`.
-base_formal_subtype.nit:83,10--27: Warning: expression is already a `G[Object]` since it is a `VGVVE`.
+base_formal_subtype.nit:80,10--25: Warning: expression is already a `G[VVE]` since it is a `VGVVE`.
+base_formal_subtype.nit:81,10--24: Warning: expression is already a `G[VE]` since it is a `VGVVE`.
+base_formal_subtype.nit:82,10--23: Warning: expression is already a `G[E]` since it is a `VGVVE`.
+base_formal_subtype.nit:83,10--28: Warning: expression is already a `G[Object]` since it is a `VGVVE`.
 base_formal_subtype.nit:84,10--25: Warning: expression is already a `Object` since it is a `VGVVE`.
index ab2b981..1c07e6e 100644 (file)
@@ -1 +1 @@
-alt/base_gen2_alt1.nit:61,13--17: Type Error: `A` is not a generic class.
+alt/base_gen2_alt1.nit:61,13--18: Type Error: `A` is not a generic class.
index 08000b1..5693f2b 100644 (file)
@@ -1 +1 @@
-alt/base_gen2_alt3.nit:63,13--22: Type Error: expected 1 formal argument(s) for `B[E: nullable Object]`; got 2.
+alt/base_gen2_alt3.nit:63,13--23: Type Error: expected 1 formal argument(s) for `B[E: nullable Object]`; got 2.
index 77eb2ca..eaad7c9 100644 (file)
@@ -1 +1 @@
-alt/base_gen2_alt5.nit:65,13--17: Type Error: expected 2 formal argument(s) for `C[F: nullable Object, G: nullable Object]`; got 1.
+alt/base_gen2_alt5.nit:65,13--18: Type Error: expected 2 formal argument(s) for `C[F: nullable Object, G: nullable Object]`; got 1.
index e8ade92..989bc61 100644 (file)
@@ -1,4 +1,4 @@
 base_isa_gen1.nit:62,8--14: Warning: expression is already a `A` since it is a `F`.
-base_isa_gen1.nit:65,8--29: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
-base_isa_gen1.nit:66,8--29: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
+base_isa_gen1.nit:65,8--30: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
+base_isa_gen1.nit:66,8--30: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
 true
index 1994474..6dde482 100644 (file)
@@ -1,5 +1,5 @@
-base_isa_gen2.nit:39,8--21: Warning: expression is already a `A[Object]`.
-base_isa_gen2.nit:41,8--21: Warning: expression is already a `A[Object]` since it is a `B[Object]`.
-base_isa_gen2.nit:44,8--21: Warning: expression is already a `A[Object]` since it is a `C[Object]`.
-base_isa_gen2.nit:48,8--21: Warning: expression is already a `A[Object]` since it is a `D[Object, Object]`.
+base_isa_gen2.nit:39,8--22: Warning: expression is already a `A[Object]`.
+base_isa_gen2.nit:41,8--22: Warning: expression is already a `A[Object]` since it is a `B[Object]`.
+base_isa_gen2.nit:44,8--22: Warning: expression is already a `A[Object]` since it is a `C[Object]`.
+base_isa_gen2.nit:48,8--22: Warning: expression is already a `A[Object]` since it is a `D[Object, Object]`.
 true
index 427c827..8725a4a 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen4.nit:34,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen4.nit:36,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen4.nit:40,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen4.nit:42,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen4.nit:36,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen4.nit:40,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen4.nit:42,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 true
index 6e347f5..c391776 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen5.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen5.nit:41,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen5.nit:46,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen5.nit:48,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen5.nit:41,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen5.nit:46,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen5.nit:48,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 true
index 1569432..0e4a6ca 100644 (file)
@@ -1,10 +1,10 @@
-base_isa_gen8.nit:49,8--17: Warning: expression is already a `A[X]`.
-base_isa_gen8.nit:50,8--17: Warning: expression is already a `A[Y]`.
-base_isa_gen8.nit:51,8--17: Warning: expression is already a `A[Z]`.
-base_isa_gen8.nit:53,8--21: Warning: expression is already a `B[Object]` since it is a `B[X]`.
-base_isa_gen8.nit:55,8--21: Warning: expression is already a `C[X, X]`.
-base_isa_gen8.nit:56,8--21: Warning: expression is already a `C[X, Y]`.
-base_isa_gen8.nit:57,8--21: Warning: expression is already a `C[X, Z]`.
-base_isa_gen8.nit:59,8--22: Warning: expression is already a `D[X, Y, Z]`.
-base_isa_gen8.nit:60,8--28: Warning: expression is already a `E[X, Y, Z, Bool]`.
+base_isa_gen8.nit:49,8--18: Warning: expression is already a `A[X]`.
+base_isa_gen8.nit:50,8--18: Warning: expression is already a `A[Y]`.
+base_isa_gen8.nit:51,8--18: Warning: expression is already a `A[Z]`.
+base_isa_gen8.nit:53,8--22: Warning: expression is already a `B[Object]` since it is a `B[X]`.
+base_isa_gen8.nit:55,8--22: Warning: expression is already a `C[X, X]`.
+base_isa_gen8.nit:56,8--22: Warning: expression is already a `C[X, Y]`.
+base_isa_gen8.nit:57,8--22: Warning: expression is already a `C[X, Z]`.
+base_isa_gen8.nit:59,8--23: Warning: expression is already a `D[X, Y, Z]`.
+base_isa_gen8.nit:60,8--29: Warning: expression is already a `E[X, Y, Z, Bool]`.
 true
index ae76751..2b455c4 100644 (file)
@@ -1,6 +1,6 @@
 base_isa_nullable1.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Integer]`.
-base_isa_nullable1.nit:41,8--24: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
-base_isa_nullable1.nit:46,8--25: Warning: expression is already a `B[B[Integer]]`.
-base_isa_nullable1.nit:48,8--26: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
-base_isa_nullable1.nit:50,8--33: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
+base_isa_nullable1.nit:41,8--25: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
+base_isa_nullable1.nit:46,8--27: Warning: expression is already a `B[B[Integer]]`.
+base_isa_nullable1.nit:48,8--28: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
+base_isa_nullable1.nit:50,8--34: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
 true
index b4b3d25..947e8c1 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_nullable2.nit:27,8--23: Warning: expression is already a `nullable A` since it is a `A`.
-base_isa_nullable2.nit:29,8--30: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
-base_isa_nullable2.nit:30,8--39: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
-base_isa_nullable2.nit:33,8--30: Warning: expression is already a `C[nullable Object]`.
+base_isa_nullable2.nit:29,8--31: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
+base_isa_nullable2.nit:30,8--40: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
+base_isa_nullable2.nit:33,8--31: Warning: expression is already a `C[nullable Object]`.
 true
index 3ba9f50..a2b07bc 100644 (file)
@@ -1,6 +1,6 @@
-base_isa_vt_gen1.nit:30,10--34: Warning: expression is already a `Triple[T, U, V]`.
-base_isa_vt_gen1.nit:54,8--52: Warning: expression is already a `Triple[String, Int, nullable Object]`.
-base_isa_vt_gen1.nit:57,8--46: Warning: expression is already a `Triple[String, String, String]`.
-base_isa_vt_gen1.nit:60,8--48: Warning: expression is already a `Triple[String, String, B[String]]`.
-base_isa_vt_gen1.nit:63,8--46: Warning: expression is already a `Triple[String, String, String]`.
+base_isa_vt_gen1.nit:30,10--35: Warning: expression is already a `Triple[T, U, V]`.
+base_isa_vt_gen1.nit:54,8--53: Warning: expression is already a `Triple[String, Int, nullable Object]`.
+base_isa_vt_gen1.nit:57,8--47: Warning: expression is already a `Triple[String, String, String]`.
+base_isa_vt_gen1.nit:60,8--50: Warning: expression is already a `Triple[String, String, B[String]]`.
+base_isa_vt_gen1.nit:63,8--47: Warning: expression is already a `Triple[String, String, String]`.
 true
diff --git a/tests/sav/base_operators.res b/tests/sav/base_operators.res
new file mode 100644 (file)
index 0000000..9533fc2
--- /dev/null
@@ -0,0 +1,32 @@
+0
+1
+2
+3
+4
+5
+6
+15
+16
+14
+19
+18
+17
+16
+7
+9
+10
+11
+12
+13
+
+2
+6
+3
+4
+5
+16
+14
+15
+16
+17
+18
diff --git a/tests/sav/base_primitive_recv.res b/tests/sav/base_primitive_recv.res
new file mode 100644 (file)
index 0000000..f70f395
--- /dev/null
@@ -0,0 +1,4 @@
+1
+1.000000
+1
+1.000000
index e7cb189..9285e6f 100644 (file)
@@ -1 +1 @@
-alt/base_vararg3_alt1.nit:41,7--13: Type Error: expected `Int`, got `Array[Int]`.
+alt/base_vararg3_alt1.nit:41,7--13: Type Error: expected `Int`, got `Array[Int]`. Is an ellipsis `...` missing on the argument?
index 4ca932b..acafe02 100644 (file)
@@ -1 +1 @@
-alt/base_vararg3_alt3.nit:33,9: Type Error: expected `Int`, got `Array[Int]`.
+alt/base_vararg3_alt3.nit:33,9: Type Error: expected `Int`, got `Array[Int]`. Is an ellipsis `...` missing on the argument?
index 319de47..bae2431 100644 (file)
@@ -1 +1 @@
-error_formal.nit:18,9--13: Type Error: formal type `T` cannot have formal parameters.
+error_formal.nit:18,9--14: Type Error: formal type `T` cannot have formal parameters.
index 623beb3..3687868 100644 (file)
@@ -1 +1 @@
-alt/error_needed_method_alt2.nit:47,10--27: Type Error: cannot instantiate interface `Collection[Int]`.
+alt/error_needed_method_alt2.nit:47,10--28: Type Error: cannot instantiate interface `Collection[Int]`.
index 1949e18..69708db 100644 (file)
@@ -23,7 +23,7 @@ error_operators.nit:46,10: Syntax Error: binary operator `>=` requires exactly o
 error_operators.nit:47,11: Syntax Error: binary operator `<=>` requires exactly one parameter; got 0.
 error_operators.nit:48,10: Syntax Error: binary operator `<<` requires exactly one parameter; got 0.
 error_operators.nit:49,10: Syntax Error: binary operator `>>` requires exactly one parameter; got 0.
-error_operators.nit:50,14: Syntax Error: `foo=` requires at least 1 parameter(s); got 0.
+error_operators.nit:50,11: Syntax Error: `foo=` requires at least 1 parameter(s); got 0.
 error_operators.nit:51,10: Syntax Error: `[]` requires at least 1 parameter(s); got 0.
 error_operators.nit:52,9--14: Syntax Error: `[]=` requires at least 2 parameter(s); got 1.
 error_operators.nit:57,7--18: Syntax Error: binary operator `+` requires exactly one parameter; got 3.
index e00f31a..8c231e7 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt2_alt1.nit:26,18: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt1::A::f1`.
+alt/error_redef_1alt2_alt1.nit:26,15: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt1::A::f1`.
index 618b516..8c19f5a 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt2_alt4.nit:29,18: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt4::A::f1`.
+alt/error_redef_1alt2_alt4.nit:29,15: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt4::A::f1`.
index b835f2c..8af74ef 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt4_alt1.nit:26,18: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt1::A::f1`.
+alt/error_redef_1alt4_alt1.nit:26,15: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt1::A::f1`.
index f957017..4391f63 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt4_alt4.nit:29,18: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt4::A::f1`.
+alt/error_redef_1alt4_alt4.nit:29,15: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt4::A::f1`.
index 790dae0..fe2a6f4 100644 (file)
@@ -1 +1 @@
-error_syntax2.nit:1,1: Syntax Error: unknown token `&`.
+error_syntax2.nit:1,1: Syntax Error: unknown token ``&`.
index d970d0e..ab9e44c 100644 (file)
@@ -1,2 +1,2 @@
 alt/error_type_unk_alt2.nit:9,8--11: Error: class `Fail` not found in module `error_type_unk_alt2`.
-alt/error_type_unk_alt2.nit:11,8--13: Error: class `Fail` not found in module `error_type_unk_alt2`.
+alt/error_type_unk_alt2.nit:11,8--14: Error: class `Fail` not found in module `error_type_unk_alt2`.
index ab1b279..92b9dfd 100644 (file)
@@ -1 +1 @@
-error_virtual_type2.nit:40,17--26: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
+error_virtual_type2.nit:40,17--27: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
index cbecfd2..102039e 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt1.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> T.
+alt/error_virtual_type2_alt1.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> T <-> T.
 alt/error_virtual_type2_alt1.nit:25,2--10: Error: circularity of virtual type definition: T <-> T.
 alt/error_virtual_type2_alt1.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt1.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt1.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt1.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 64d40fb..a591422 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt2.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> nullable T.
+alt/error_virtual_type2_alt2.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> T <-> nullable T.
 alt/error_virtual_type2_alt2.nit:25,2--26,19: Error: circularity of virtual type definition: T <-> nullable T.
 alt/error_virtual_type2_alt2.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt2.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt2.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt2.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index d0f163d..0a01c3d 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt3.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> G[T] <-> T.
-alt/error_virtual_type2_alt3.nit:25,2--27,12: Error: circularity of virtual type definition: T <-> G[T].
+alt/error_virtual_type2_alt3.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> G[T] <-> T.
+alt/error_virtual_type2_alt3.nit:25,2--27,13: Error: circularity of virtual type definition: T <-> G[T].
 alt/error_virtual_type2_alt3.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt3.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt3.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt3.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 521bd6a..4d60ab3 100644 (file)
@@ -1,4 +1,4 @@
 alt/error_virtual_type2_alt4.nit:29,10--13: Error: class `FAIL` not found in module `error_virtual_type2_alt4`.
 alt/error_virtual_type2_alt4.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt4.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt4.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt4.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 5d3086a..62974d7 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt5.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> U.
+alt/error_virtual_type2_alt5.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> T <-> U.
 alt/error_virtual_type2_alt5.nit:25,2--30,10: Error: circularity of virtual type definition: T <-> U.
 alt/error_virtual_type2_alt5.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt5.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt5.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt5.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 964af31..48dc700 100644 (file)
@@ -1,2 +1,2 @@
-alt/error_virtual_type2_alt6.nit:40,17--26: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
-alt/error_virtual_type2_alt6.nit:41,2--22: Error: a property `GT` is already defined in class `B` at line 39.
+alt/error_virtual_type2_alt6.nit:40,17--27: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt6.nit:41,2--23: Error: a property `GT` is already defined in class `B` at line 39.
index 359a845..7514f5f 100644 (file)
@@ -1,2 +1,2 @@
 alt/error_virtual_type_alt3.nit:25,12: Type Error: expected `Object`, got `T`.
-alt/error_virtual_type_alt3.nit:22,2--25,12: Error: circularity of virtual type definition: T <-> G[T].
+alt/error_virtual_type_alt3.nit:22,2--25,13: Error: circularity of virtual type definition: T <-> G[T].
index b929fb0..4000211 100644 (file)
@@ -1,4 +1,4 @@
 base_isa_gen1.nit:62,8--14: Warning: expression is already a `A` since it is a `F`.
-base_isa_gen1.nit:65,8--29: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
-base_isa_gen1.nit:66,8--29: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
+base_isa_gen1.nit:65,8--30: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
+base_isa_gen1.nit:66,8--30: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
 Runtime error: Assert failed (base_isa_gen1.nit:68)
index 47f5a1a..203c263 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen4.nit:34,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen4.nit:36,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen4.nit:40,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen4.nit:42,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen4.nit:36,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen4.nit:40,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen4.nit:42,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 Runtime error: Assert failed (base_isa_gen4.nit:37)
index 74ee1c6..26754cf 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen5.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen5.nit:41,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen5.nit:46,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen5.nit:48,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen5.nit:41,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen5.nit:46,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen5.nit:48,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 Runtime error: Assert failed (base_isa_gen5.nit:42)
index 1b28872..ff43ba5 100644 (file)
@@ -1,6 +1,6 @@
 base_isa_nullable1.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Integer]`.
-base_isa_nullable1.nit:41,8--24: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
-base_isa_nullable1.nit:46,8--25: Warning: expression is already a `B[B[Integer]]`.
-base_isa_nullable1.nit:48,8--26: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
-base_isa_nullable1.nit:50,8--33: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
+base_isa_nullable1.nit:41,8--25: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
+base_isa_nullable1.nit:46,8--27: Warning: expression is already a `B[B[Integer]]`.
+base_isa_nullable1.nit:48,8--28: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
+base_isa_nullable1.nit:50,8--34: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
 Runtime error: Assert failed (base_isa_nullable1.nit:42)
index 5255183..84216d5 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_nullable2.nit:27,8--23: Warning: expression is already a `nullable A` since it is a `A`.
-base_isa_nullable2.nit:29,8--30: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
-base_isa_nullable2.nit:30,8--39: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
-base_isa_nullable2.nit:33,8--30: Warning: expression is already a `C[nullable Object]`.
+base_isa_nullable2.nit:29,8--31: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
+base_isa_nullable2.nit:30,8--40: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
+base_isa_nullable2.nit:33,8--31: Warning: expression is already a `C[nullable Object]`.
 Runtime error: Assert failed (base_isa_nullable2.nit:32)
index 9bd4a19..c3c9801 100644 (file)
@@ -402,41 +402,41 @@ Distribution of direct smallers
   <=8: sub-population=1 (14.28%); cumulated value=6 (100.00%)
 --- AST Metrics ---
 ## All nodes of the AST
- population: 48
+ population: 50
  minimum value: 1
  maximum value: 40
- total value: 261
- average value: 5.43
+ total value: 270
+ average value: 5.40
  distribution:
-  <=1: sub-population=15 (31.25%); cumulated value=15 (5.74%)
-  <=2: sub-population=5 (10.41%); cumulated value=10 (3.83%)
-  <=4: sub-population=10 (20.83%); cumulated value=32 (12.26%)
-  <=8: sub-population=10 (20.83%); cumulated value=64 (24.52%)
-  <=16: sub-population=4 (8.33%); cumulated value=44 (16.85%)
-  <=32: sub-population=3 (6.25%); cumulated value=56 (21.45%)
-  <=64: sub-population=1 (2.08%); cumulated value=40 (15.32%)
+  <=1: sub-population=16 (32.00%); cumulated value=16 (5.92%)
+  <=2: sub-population=5 (10.00%); cumulated value=10 (3.70%)
+  <=4: sub-population=9 (18.00%); cumulated value=28 (10.37%)
+  <=8: sub-population=12 (24.00%); cumulated value=76 (28.14%)
+  <=16: sub-population=4 (8.00%); cumulated value=44 (16.29%)
+  <=32: sub-population=3 (6.00%); cumulated value=56 (20.74%)
+  <=64: sub-population=1 (2.00%); cumulated value=40 (14.81%)
  list:
-  TId: 40 (15.32%)
-  APublicVisibility: 19 (7.27%)
-  AListExprs: 19 (7.27%)
-  ACallExpr: 18 (6.89%)
-  TClassid: 15 (5.74%)
-  TNumber: 10 (3.83%)
-  ADecIntExpr: 10 (3.83%)
-  AType: 9 (3.44%)
-  TKwend: 8 (3.06%)
-  ASignature: 8 (3.06%)
+  TId: 40 (14.81%)
+  APublicVisibility: 19 (7.03%)
+  AListExprs: 19 (7.03%)
+  ACallExpr: 18 (6.66%)
+  TClassid: 15 (5.55%)
+  TNumber: 10 (3.70%)
+  ADecIntExpr: 10 (3.70%)
+  AType: 9 (3.33%)
+  TKwend: 8 (2.96%)
+  ASignature: 8 (2.96%)
   ...
-  ACallAssignExpr: 1 (0.38%)
-  AAnnotations: 1 (0.38%)
-  AReturnExpr: 1 (0.38%)
-  TKwreturn: 1 (0.38%)
-  AInterfaceClasskind: 1 (0.38%)
-  TKwinterface: 1 (0.38%)
-  ANoImport: 1 (0.38%)
-  AMainMethPropdef: 1 (0.38%)
-  AMainClassdef: 1 (0.38%)
-  TKwimport: 1 (0.38%)
+  ASelfExpr: 1 (0.37%)
+  AAnnotations: 1 (0.37%)
+  ACallAssignExpr: 1 (0.37%)
+  TKwreturn: 1 (0.37%)
+  AInterfaceClasskind: 1 (0.37%)
+  TKwinterface: 1 (0.37%)
+  ANoImport: 1 (0.37%)
+  AMainMethPropdef: 1 (0.37%)
+  AMainClassdef: 1 (0.37%)
+  TKwimport: 1 (0.37%)
 ## All identifiers of the AST
  population: 20
  minimum value: 1
@@ -701,8 +701,6 @@ Statistics of type usage:
           Sys: 4.0
        blooming mclasses (threshold: 12.0)
           Sys: 16.0
-       blooming mclasses (threshold: 12.0)
-          Sys: 16.0
 --- Detection of the usage of covariance static type conformance ---
 -- Total --
 - Kinds of the subtype -
index 7a8fe04..b63845a 100644 (file)
@@ -34,9 +34,8 @@ fun errno: Int is extern `{
        return errno;
 `}
 
-fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is extern `{
-        return errno;
-`}
+fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is
+       extern `{ return errno; `}
 
 private class A
        var my_attr = 1234
index f8d4f23..cef4d20 100644 (file)
@@ -1,4 +1,4 @@
-test_nitunit3/README.md: Error: there is a block of invalid Nit code, thus not considered a nitunit. To suppress this warning, enclose the block with a fence tagged `nitish` or `raw` (see `man nitdoc`). At 1,1: Syntax Error: unknown token `;`..
+test_nitunit3/README.md: Error: there is a block of invalid Nit code, thus not considered a nitunit. To suppress this warning, enclose the block with a fence tagged `nitish` or `raw` (see `man nitdoc`). At 1,2--4: Syntax Error: unexpected malformed character '\]..
 test_nitunit3/README.md: ERROR: nitunit.test_nitunit3.<group> (in .nitunit/test_nitunit3-0.nit): Runtime error: Assert failed (.nitunit/test_nitunit3-0.nit:7)
 
 DocUnits:
@@ -7,7 +7,7 @@ Entities: 2; Documented ones: 2; With nitunits: 2; Failures: 2
 TestSuites:
 No test cases found
 Class suites: 0; Test Cases: 0; Failures: 0
-<testsuites><testsuite package="test_nitunit3"><testcase classname="nitunit.test_nitunit3" name="&lt;group&gt;"><failure message="test_nitunit3&#47;README.md: Invalid block of code. At 1,1: Syntax Error: unknown token `;`.."></failure><system-err></system-err><system-out>assert false
+<testsuites><testsuite package="test_nitunit3"><testcase classname="nitunit.test_nitunit3" name="&lt;group&gt;"><failure message="test_nitunit3&#47;README.md: Invalid block of code. At 1,2--4: Syntax Error: unexpected malformed character &#39;\].."></failure><system-err></system-err><system-out>assert false
 assert true
 </system-out><error message="Runtime error: Assert failed (.nitunit&#47;test_nitunit3-0.nit:7)
 "></error></testcase></testsuite><testsuite package="test_nitunit3"><testcase classname="nitunit.test_nitunit3.&lt;module&gt;" name="&lt;module&gt;"><system-err></system-err><system-out>assert true
similarity index 55%
rename from tests/sav/test_operators.res
rename to tests/sav/syntax_semi.res
index cf2273e..f00c965 100644 (file)
@@ -4,11 +4,7 @@
 4
 5
 6
-15
-14
 7
+8
 9
 10
-11
-12
-13
diff --git a/tests/sav/syntax_semi2.res b/tests/sav/syntax_semi2.res
new file mode 100644 (file)
index 0000000..c1f2b6c
--- /dev/null
@@ -0,0 +1,13 @@
+syntax_semi2.nit:17,9: Warning: superfluous `;`.
+syntax_semi2.nit:18,10: Warning: superfluous `;`.
+syntax_semi2.nit:19,9: Warning: superfluous `;`.
+syntax_semi2.nit:21,1: Warning: superfluous `;`.
+syntax_semi2.nit:22,1: Warning: superfluous `;`.
+syntax_semi2.nit:22,2: Warning: superfluous `;`.
+syntax_semi2.nit:24,1: Warning: superfluous `;`.
+1
+2
+3
+4
+5
+6
diff --git a/tests/sav/syntax_semi2_alt1.res b/tests/sav/syntax_semi2_alt1.res
new file mode 100644 (file)
index 0000000..782ebf0
--- /dev/null
@@ -0,0 +1 @@
+alt/syntax_semi2_alt1.nit:26,3: Syntax Error: unexpected ';'.
index 67755e7..9357190 100644 (file)
@@ -4,7 +4,7 @@ test_attr_easy.nit:19,31--39: Warning: expression is already a `Int`.
 test_attr_easy.nit:19,43--53: Warning: expression is already a `Float`.
 test_attr_easy.nit:20,5--16: Warning: expression is already a `String`.
 test_attr_easy.nit:20,20--26: Warning: expression is already a `B`.
-test_attr_easy.nit:20,44--62: Warning: expression is already a `HashMap[Int, B]`.
+test_attr_easy.nit:20,44--63: Warning: expression is already a `HashMap[Int, B]`.
 true false 12345 1.235 asdf true
 an instance of B
 true true true true
diff --git a/tests/sav/test_bufferedfilereader.res b/tests/sav/test_bufferedfilereader.res
new file mode 100644 (file)
index 0000000..3c68ca8
--- /dev/null
@@ -0,0 +1,244 @@
+Read 4 chars: # Th
+Read 4 chars: is f
+Read 4 chars: ile 
+Read 4 chars: is p
+Read 4 chars: art 
+Read 4 chars: of N
+Read 4 chars: IT (
+Read 4 chars:  htt
+Read 4 chars: p://
+Read 4 chars: www.
+Read 4 chars: nitl
+Read 4 chars: angu
+Read 4 chars: age.
+Read 4 chars: org 
+Read 4 chars: ).
+#
+Read 4 chars: 
+# C
+Read 4 chars: opyr
+Read 4 chars: ight
+Read 4 chars:  201
+Read 4 chars: 3 Al
+Read 4 chars: exis
+Read 4 chars:  Laf
+Read 4 chars: erri
+Read 4 chars: ère
+Read 4 chars:  <al
+Read 4 chars: exis
+Read 4 chars: .laf
+Read 4 chars: @xym
+Read 4 chars: us.n
+Read 4 chars: et>
+
+Read 4 chars: #
+# 
+Read 4 chars: Lice
+Read 4 chars: nsed
+Read 4 chars:  und
+Read 4 chars: er t
+Read 4 chars: he A
+Read 4 chars: pach
+Read 4 chars: e Li
+Read 4 chars: cens
+Read 4 chars: e, V
+Read 4 chars: ersi
+Read 4 chars: on 2
+Read 4 chars: .0 (
+Read 4 chars: the 
+Read 4 chars: "Lic
+Read 4 chars: ense
+Read 4 chars: ");
+
+Read 4 chars: # yo
+Read 4 chars: u ma
+Read 4 chars: y no
+Read 4 chars: t us
+Read 4 chars: e th
+Read 4 chars: is f
+Read 4 chars: ile 
+Read 4 chars: exce
+Read 4 chars: pt i
+Read 4 chars: n co
+Read 4 chars: mpli
+Read 4 chars: ance
+Read 4 chars:  wit
+Read 4 chars: h th
+Read 4 chars: e Li
+Read 4 chars: cens
+Read 4 chars: e.
+#
+Read 4 chars:  You
+Read 4 chars:  may
+Read 4 chars:  obt
+Read 4 chars: ain 
+Read 4 chars: a co
+Read 4 chars: py o
+Read 4 chars: f th
+Read 4 chars: e Li
+Read 4 chars: cens
+Read 4 chars: e at
+Read 4 chars: 
+#
+#
+Read 4 chars:     
+Read 4 chars:  htt
+Read 4 chars: p://
+Read 4 chars: www.
+Read 4 chars: apac
+Read 4 chars: he.o
+Read 4 chars: rg/l
+Read 4 chars: icen
+Read 4 chars: ses/
+Read 4 chars: LICE
+Read 4 chars: NSE-
+Read 4 chars: 2.0
+
+Read 4 chars: #
+# 
+Read 4 chars: Unle
+Read 4 chars: ss r
+Read 4 chars: equi
+Read 4 chars: red 
+Read 4 chars: by a
+Read 4 chars: ppli
+Read 4 chars: cabl
+Read 4 chars: e la
+Read 4 chars: w or
+Read 4 chars:  agr
+Read 4 chars: eed 
+Read 4 chars: to i
+Read 4 chars: n wr
+Read 4 chars: itin
+Read 4 chars: g, s
+Read 4 chars: oftw
+Read 4 chars: are
+
+Read 4 chars: # di
+Read 4 chars: stri
+Read 4 chars: bute
+Read 4 chars: d un
+Read 4 chars: der 
+Read 4 chars: the 
+Read 4 chars: Lice
+Read 4 chars: nse 
+Read 4 chars: is d
+Read 4 chars: istr
+Read 4 chars: ibut
+Read 4 chars: ed o
+Read 4 chars: n an
+Read 4 chars:  "AS
+Read 4 chars:  IS"
+Read 4 chars:  BAS
+Read 4 chars: IS,
+
+Read 4 chars: # WI
+Read 4 chars: THOU
+Read 4 chars: T WA
+Read 4 chars: RRAN
+Read 4 chars: TIES
+Read 4 chars:  OR 
+Read 4 chars: COND
+Read 4 chars: ITIO
+Read 4 chars: NS O
+Read 4 chars: F AN
+Read 4 chars: Y KI
+Read 4 chars: ND, 
+Read 4 chars: eith
+Read 4 chars: er e
+Read 4 chars: xpre
+Read 4 chars: ss o
+Read 4 chars: r im
+Read 4 chars: plie
+Read 4 chars: d.
+#
+Read 4 chars:  See
+Read 4 chars:  the
+Read 4 chars:  Lic
+Read 4 chars: ense
+Read 4 chars:  for
+Read 4 chars:  the
+Read 4 chars:  spe
+Read 4 chars: cifi
+Read 4 chars: c la
+Read 4 chars: ngua
+Read 4 chars: ge g
+Read 4 chars: over
+Read 4 chars: ning
+Read 4 chars:  per
+Read 4 chars: miss
+Read 4 chars: ions
+Read 4 chars:  and
+Read 4 chars: 
+# l
+Read 4 chars: imit
+Read 4 chars: atio
+Read 4 chars: ns u
+Read 4 chars: nder
+Read 4 chars:  the
+Read 4 chars:  Lic
+Read 4 chars: ense
+Read 4 chars: .
+
+m
+Read 4 chars: odul
+Read 4 chars: e te
+Read 4 chars: st_a
+Read 4 chars: nnot
+Read 4 chars: _c_c
+Read 4 chars: ompi
+Read 4 chars: ler 
+Read 4 chars: is
+       
+Read 4 chars: cfla
+Read 4 chars: gs "
+Read 4 chars: -I /
+Read 4 chars: usr/
+Read 4 chars: incl
+Read 4 chars: ude"
+Read 4 chars: 
+       cf
+Read 4 chars: lags
+Read 4 chars:  exe
+Read 4 chars: c("p
+Read 4 chars: kg-c
+Read 4 chars: onfi
+Read 4 chars: g", 
+Read 4 chars: "--c
+Read 4 chars: flag
+Read 4 chars: s", 
+Read 4 chars: "sdl
+Read 4 chars: ")
+       
+Read 4 chars: ldfl
+Read 4 chars: ags 
+Read 4 chars: "-lm
+Read 4 chars: "
+       l
+Read 4 chars: dfla
+Read 4 chars: gs("
+Read 4 chars: -lm"
+Read 4 chars: , "-
+Read 4 chars: L /u
+Read 4 chars: sr/b
+Read 4 chars: in")
+Read 4 chars: 
+end
+Read 4 chars: 
+
+fu
+Read 4 chars: n du
+Read 4 chars: mmy 
+Read 4 chars: `{ p
+Read 4 chars: rint
+Read 4 chars: f("n
+Read 4 chars: othi
+Read 4 chars: ng..
+Read 4 chars: .\n"
+Read 4 chars: ); `
+Read 4 chars: }
+
+d
+Read 4 chars: ummy
+Read 1 chars: 
+
index 893e1ea..e33ddb5 100644 (file)
@@ -1,10 +1,14 @@
+test_ffi_c_operators.nit:139,7--15: Warning: expression is not null, since it is a `A`.
 11
+123
 9
+-123
 22
 3
 false
 false
 false
+false
 true
 3
 4096
@@ -22,7 +26,9 @@ true
 true
 32
 8
+7
+5
+2
+-4
 52
 456
-123
--123
index 1f99f54..9172e4f 100644 (file)
@@ -41,6 +41,7 @@ Start ../src/test_parser.nit:17,1--156,1
         TId "rank" ../src/test_parser.nit:27,14--17
         AType ../src/test_parser.nit:27,20--22
           TClassid "Int" ../src/test_parser.nit:27,20--22
+        TAssign "=" ../src/test_parser.nit:27,24
         ADecIntExpr ../src/test_parser.nit:27,26
           TNumber "0" ../src/test_parser.nit:27,26
       AMethPropdef ../src/test_parser.nit:28,2--38,4
@@ -54,6 +55,7 @@ Start ../src/test_parser.nit:17,1--156,1
           AParam ../src/test_parser.nit:28,18
             TId "n" ../src/test_parser.nit:28,18
           TCpar ")" ../src/test_parser.nit:28,19
+        TKwdo "do" ../src/test_parser.nit:29,2--3
         ABlockExpr ../src/test_parser.nit:30,3--38,4
           AIfExpr ../src/test_parser.nit:30,3--34,5
             TKwif "if" ../src/test_parser.nit:30,3--4
@@ -65,6 +67,7 @@ Start ../src/test_parser.nit:17,1--156,1
               TKwisa "isa" ../src/test_parser.nit:30,8--10
               AType ../src/test_parser.nit:30,12--16
                 TClassid "Token" ../src/test_parser.nit:30,12--16
+            TKwthen "then" ../src/test_parser.nit:30,18--21
             ABlockExpr ../src/test_parser.nit:31,4--88
               ACallExpr ../src/test_parser.nit:31,4--88
                 AImplicitSelfExpr ../src/test_parser.nit:31,4
@@ -110,6 +113,7 @@ Start ../src/test_parser.nit:17,1--156,1
                   AStringExpr ../src/test_parser.nit:31,84--87
                     TString "\"\\n\"" ../src/test_parser.nit:31,84--87
                   TCpar ")" ../src/test_parser.nit:31,88
+            TKwelse "else" ../src/test_parser.nit:32,3--6
             ABlockExpr ../src/test_parser.nit:33,4--34,5
               ACallExpr ../src/test_parser.nit:33,4--59
                 AImplicitSelfExpr ../src/test_parser.nit:33,4
@@ -267,6 +271,7 @@ Start ../src/test_parser.nit:17,1--156,1
                   TEq "==" ../src/test_parser.nit:49,16--17
                   AStringExpr ../src/test_parser.nit:49,19--22
                     TString "\"-n\"" ../src/test_parser.nit:49,19--22
+                TKwthen "then" ../src/test_parser.nit:49,24--27
                 ABlockExpr ../src/test_parser.nit:50,3--17
                   ACallAssignExpr ../src/test_parser.nit:50,3--17
                     AImplicitSelfExpr ../src/test_parser.nit:50,3
@@ -275,6 +280,7 @@ Start ../src/test_parser.nit:17,1--156,1
                     TAssign "=" ../src/test_parser.nit:50,12
                     ATrueExpr ../src/test_parser.nit:50,14--17
                       TKwtrue "true" ../src/test_parser.nit:50,14--17
+                TKwelse "else" ../src/test_parser.nit:51,2--5
                 AIfExpr ../src/test_parser.nit:51,7--66,4
                   TKwif "if" ../src/test_parser.nit:51,7--8
                   AEqExpr ../src/test_parser.nit:51,10--27
@@ -288,6 +294,7 @@ Start ../src/test_parser.nit:17,1--156,1
                     TEq "==" ../src/test_parser.nit:51,21--22
                     AStringExpr ../src/test_parser.nit:51,24--27
                       TString "\"-l\"" ../src/test_parser.nit:51,24--27
+                  TKwthen "then" ../src/test_parser.nit:51,29--32
                   ABlockExpr ../src/test_parser.nit:52,3--19
                     ACallAssignExpr ../src/test_parser.nit:52,3--19
                       AImplicitSelfExpr ../src/test_parser.nit:52,3
@@ -296,6 +303,7 @@ Start ../src/test_parser.nit:17,1--156,1
                       TAssign "=" ../src/test_parser.nit:52,14
                       ATrueExpr ../src/test_parser.nit:52,16--19
                         TKwtrue "true" ../src/test_parser.nit:52,16--19
+                  TKwelse "else" ../src/test_parser.nit:53,2--5
                   AIfExpr ../src/test_parser.nit:53,7--66,4
                     TKwif "if" ../src/test_parser.nit:53,7--8
                     AEqExpr ../src/test_parser.nit:53,10--27
@@ -309,6 +317,7 @@ Start ../src/test_parser.nit:17,1--156,1
                       TEq "==" ../src/test_parser.nit:53,21--22
                       AStringExpr ../src/test_parser.nit:53,24--27
                         TString "\"-p\"" ../src/test_parser.nit:53,24--27
+                    TKwthen "then" ../src/test_parser.nit:53,29--32
                     ABlockExpr ../src/test_parser.nit:54,3--20
                       ACallAssignExpr ../src/test_parser.nit:54,3--20
                         AImplicitSelfExpr ../src/test_parser.nit:54,3
@@ -317,6 +326,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TAssign "=" ../src/test_parser.nit:54,14
                         AFalseExpr ../src/test_parser.nit:54,16--20
                           TKwfalse "false" ../src/test_parser.nit:54,16--20
+                    TKwelse "else" ../src/test_parser.nit:55,2--5
                     AIfExpr ../src/test_parser.nit:55,7--66,4
                       TKwif "if" ../src/test_parser.nit:55,7--8
                       AEqExpr ../src/test_parser.nit:55,10--27
@@ -330,6 +340,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TEq "==" ../src/test_parser.nit:55,21--22
                         AStringExpr ../src/test_parser.nit:55,24--27
                           TString "\"-x\"" ../src/test_parser.nit:55,24--27
+                      TKwthen "then" ../src/test_parser.nit:55,29--32
                       ABlockExpr ../src/test_parser.nit:56,3--12
                         ACallAssignExpr ../src/test_parser.nit:56,3--12
                           AImplicitSelfExpr ../src/test_parser.nit:56,3
@@ -338,6 +349,7 @@ Start ../src/test_parser.nit:17,1--156,1
                           TAssign "=" ../src/test_parser.nit:56,7
                           ATrueExpr ../src/test_parser.nit:56,9--12
                             TKwtrue "true" ../src/test_parser.nit:56,9--12
+                      TKwelse "else" ../src/test_parser.nit:57,2--5
                       AIfExpr ../src/test_parser.nit:57,7--66,4
                         TKwif "if" ../src/test_parser.nit:57,7--8
                         AEqExpr ../src/test_parser.nit:57,10--27
@@ -351,6 +363,7 @@ Start ../src/test_parser.nit:17,1--156,1
                           TEq "==" ../src/test_parser.nit:57,21--22
                           AStringExpr ../src/test_parser.nit:57,24--27
                             TString "\"-e\"" ../src/test_parser.nit:57,24--27
+                        TKwthen "then" ../src/test_parser.nit:57,29--32
                         ABlockExpr ../src/test_parser.nit:58,3--16
                           ACallAssignExpr ../src/test_parser.nit:58,3--16
                             AImplicitSelfExpr ../src/test_parser.nit:58,3
@@ -359,6 +372,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             TAssign "=" ../src/test_parser.nit:58,11
                             ATrueExpr ../src/test_parser.nit:58,13--16
                               TKwtrue "true" ../src/test_parser.nit:58,13--16
+                        TKwelse "else" ../src/test_parser.nit:59,2--5
                         AIfExpr ../src/test_parser.nit:59,7--66,4
                           TKwif "if" ../src/test_parser.nit:59,7--8
                           AEqExpr ../src/test_parser.nit:59,10--27
@@ -372,6 +386,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             TEq "==" ../src/test_parser.nit:59,21--22
                             AStringExpr ../src/test_parser.nit:59,24--27
                               TString "\"-i\"" ../src/test_parser.nit:59,24--27
+                          TKwthen "then" ../src/test_parser.nit:59,29--32
                           ABlockExpr ../src/test_parser.nit:60,3--20
                             ACallAssignExpr ../src/test_parser.nit:60,3--20
                               AImplicitSelfExpr ../src/test_parser.nit:60,3
@@ -380,6 +395,7 @@ Start ../src/test_parser.nit:17,1--156,1
                               TAssign "=" ../src/test_parser.nit:60,15
                               ATrueExpr ../src/test_parser.nit:60,17--20
                                 TKwtrue "true" ../src/test_parser.nit:60,17--20
+                          TKwelse "else" ../src/test_parser.nit:61,2--5
                           AIfExpr ../src/test_parser.nit:61,7--66,4
                             TKwif "if" ../src/test_parser.nit:61,7--8
                             AOrExpr ../src/test_parser.nit:61,10--49
@@ -406,6 +422,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TEq "==" ../src/test_parser.nit:61,43--44
                                 AStringExpr ../src/test_parser.nit:61,46--49
                                   TString "\"-?\"" ../src/test_parser.nit:61,46--49
+                            TKwthen "then" ../src/test_parser.nit:61,51--54
                             ABlockExpr ../src/test_parser.nit:62,3--18
                               ACallAssignExpr ../src/test_parser.nit:62,3--18
                                 AImplicitSelfExpr ../src/test_parser.nit:62,3
@@ -414,6 +431,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TAssign "=" ../src/test_parser.nit:62,13
                                 ATrueExpr ../src/test_parser.nit:62,15--18
                                   TKwtrue "true" ../src/test_parser.nit:62,15--18
+                            TKwelse "else" ../src/test_parser.nit:63,2--5
                             ABlockExpr ../src/test_parser.nit:64,3--66,4
                               ACallExpr ../src/test_parser.nit:64,3--48
                                 ACallExpr ../src/test_parser.nit:64,3--8
@@ -479,6 +497,7 @@ Start ../src/test_parser.nit:17,1--156,1
                 AImplicitSelfExpr ../src/test_parser.nit:70,43
                 TId "need_help" ../src/test_parser.nit:70,43--51
                 AListExprs ../src/test_parser.nit:70,51
+            TKwthen "then" ../src/test_parser.nit:70,53--56
             ABlockExpr ../src/test_parser.nit:71,2--82,30
               ACallExpr ../src/test_parser.nit:71,2--16
                 AImplicitSelfExpr ../src/test_parser.nit:71,2
@@ -576,12 +595,14 @@ Start ../src/test_parser.nit:17,1--156,1
                   AStringExpr ../src/test_parser.nit:82,8--29
                     TString "\"  -h\tprint this help\"" ../src/test_parser.nit:82,8--29
                   TCpar ")" ../src/test_parser.nit:82,30
+            TKwelse "else" ../src/test_parser.nit:83,1--4
             AIfExpr ../src/test_parser.nit:83,6--155,3
               TKwif "if" ../src/test_parser.nit:83,6--7
               ACallExpr ../src/test_parser.nit:83,9--19
                 AImplicitSelfExpr ../src/test_parser.nit:83,9
                 TId "interactive" ../src/test_parser.nit:83,9--19
                 AListExprs ../src/test_parser.nit:83,19
+              TKwthen "then" ../src/test_parser.nit:83,21--24
               ABlockExpr ../src/test_parser.nit:84,2--117,4
                 AIfExpr ../src/test_parser.nit:84,2--93,4
                   TKwif "if" ../src/test_parser.nit:84,2--3
@@ -589,6 +610,7 @@ Start ../src/test_parser.nit:17,1--156,1
                     AImplicitSelfExpr ../src/test_parser.nit:84,5
                     TId "only_lexer" ../src/test_parser.nit:84,5--14
                     AListExprs ../src/test_parser.nit:84,14
+                  TKwthen "then" ../src/test_parser.nit:84,16--19
                   ABlockExpr ../src/test_parser.nit:85,3--86,8
                     ACallExpr ../src/test_parser.nit:85,3--43
                       AImplicitSelfExpr ../src/test_parser.nit:85,3
@@ -602,12 +624,14 @@ Start ../src/test_parser.nit:17,1--156,1
                       AListExprs ../src/test_parser.nit:86,8
                         ADecIntExpr ../src/test_parser.nit:86,8
                           TNumber "1" ../src/test_parser.nit:86,8
+                  TKwelse "else" ../src/test_parser.nit:87,2--5
                   AIfExpr ../src/test_parser.nit:87,7--93,4
                     TKwif "if" ../src/test_parser.nit:87,7--8
                     ACallExpr ../src/test_parser.nit:87,10--16
                       AImplicitSelfExpr ../src/test_parser.nit:87,10
                       TId "no_file" ../src/test_parser.nit:87,10--16
                       AListExprs ../src/test_parser.nit:87,16
+                    TKwthen "then" ../src/test_parser.nit:87,18--21
                     ABlockExpr ../src/test_parser.nit:88,3--89,8
                       ACallExpr ../src/test_parser.nit:88,3--43
                         AImplicitSelfExpr ../src/test_parser.nit:88,3
@@ -621,6 +645,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         AListExprs ../src/test_parser.nit:89,8
                           ADecIntExpr ../src/test_parser.nit:89,8
                             TNumber "1" ../src/test_parser.nit:89,8
+                    TKwelse "else" ../src/test_parser.nit:90,2--5
                     AIfExpr ../src/test_parser.nit:90,7--93,4
                       TKwif "if" ../src/test_parser.nit:90,7--8
                       ANotExpr ../src/test_parser.nit:90,10--26
@@ -632,6 +657,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             AListExprs ../src/test_parser.nit:90,17
                           TId "is_empty" ../src/test_parser.nit:90,19--26
                           AListExprs ../src/test_parser.nit:90,26
+                      TKwthen "then" ../src/test_parser.nit:90,28--31
                       ABlockExpr ../src/test_parser.nit:91,3--92,8
                         ACallExpr ../src/test_parser.nit:91,3--43
                           AImplicitSelfExpr ../src/test_parser.nit:91,3
@@ -684,6 +710,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TKwisa "isa" ../src/test_parser.nit:99,8--10
                         AType ../src/test_parser.nit:99,12--18
                           TClassid "TString" ../src/test_parser.nit:99,12--18
+                      TKwthen "then" ../src/test_parser.nit:99,20--23
                       ABlockExpr ../src/test_parser.nit:100,4--106,11
                         AVardeclExpr ../src/test_parser.nit:100,4--17
                           TKwvar "var" ../src/test_parser.nit:100,4--6
@@ -706,9 +733,11 @@ Start ../src/test_parser.nit:17,1--156,1
                             TEq "==" ../src/test_parser.nit:101,9--10
                             AStringExpr ../src/test_parser.nit:101,12--15
                               TString "\":q\"" ../src/test_parser.nit:101,12--15
+                          TKwthen "then" ../src/test_parser.nit:101,17--20
                           ABlockExpr ../src/test_parser.nit:102,5--9
                             ABreakExpr ../src/test_parser.nit:102,5--9
                               TKwbreak "break" ../src/test_parser.nit:102,5--9
+                          TKwelse "else" ../src/test_parser.nit:103,4--7
                           ABlockExpr ../src/test_parser.nit:104,5--105,6
                             ACallExpr ../src/test_parser.nit:104,5--24
                               AImplicitSelfExpr ../src/test_parser.nit:104,5
@@ -731,6 +760,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TKwisa "isa" ../src/test_parser.nit:109,8--10
                         AType ../src/test_parser.nit:109,12--17
                           TClassid "AError" ../src/test_parser.nit:109,12--17
+                      TKwthen "then" ../src/test_parser.nit:109,19--22
                       ABlockExpr ../src/test_parser.nit:110,4--111,11
                         ACallExpr ../src/test_parser.nit:110,4--57
                           AImplicitSelfExpr ../src/test_parser.nit:110,4
@@ -776,6 +806,7 @@ Start ../src/test_parser.nit:17,1--156,1
                           AImplicitSelfExpr ../src/test_parser.nit:114,10
                           TId "no_print" ../src/test_parser.nit:114,10--17
                           AListExprs ../src/test_parser.nit:114,17
+                      TKwthen "then" ../src/test_parser.nit:114,19--22
                       ABlockExpr ../src/test_parser.nit:115,4--40
                         ACallExpr ../src/test_parser.nit:115,4--40
                           AParExpr ../src/test_parser.nit:115,4--25
@@ -797,10 +828,12 @@ Start ../src/test_parser.nit:17,1--156,1
                       ABlockExpr ../src/test_parser.nit:116,3--5
                         TKwend "end" ../src/test_parser.nit:116,3--5
                     TKwend "end" ../src/test_parser.nit:117,2--4
+              TKwelse "else" ../src/test_parser.nit:118,1--4
               ABlockExpr ../src/test_parser.nit:119,2--155,3
                 AForExpr ../src/test_parser.nit:119,2--154,4
                   TKwfor "for" ../src/test_parser.nit:119,2--4
                   TId "a" ../src/test_parser.nit:119,6
+                  TKwin "in" ../src/test_parser.nit:119,8--9
                   ACallExpr ../src/test_parser.nit:119,11--14
                     AImplicitSelfExpr ../src/test_parser.nit:119,11
                     TId "args" ../src/test_parser.nit:119,11--14
@@ -816,6 +849,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         AImplicitSelfExpr ../src/test_parser.nit:121,6
                         TId "no_file" ../src/test_parser.nit:121,6--12
                         AListExprs ../src/test_parser.nit:121,12
+                      TKwthen "then" ../src/test_parser.nit:121,14--17
                       ABlockExpr ../src/test_parser.nit:122,4--45
                         ACallAssignExpr ../src/test_parser.nit:122,4--45
                           AImplicitSelfExpr ../src/test_parser.nit:122,4
@@ -836,6 +870,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TId "a" ../src/test_parser.nit:122,44
                                 AListExprs ../src/test_parser.nit:122,44
                               TCpar ")" ../src/test_parser.nit:122,45
+                      TKwelse "else" ../src/test_parser.nit:123,3--6
                       ABlockExpr ../src/test_parser.nit:124,4--127,5
                         AVardeclExpr ../src/test_parser.nit:124,4--33
                           TKwvar "var" ../src/test_parser.nit:124,4--6
@@ -902,6 +937,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         AImplicitSelfExpr ../src/test_parser.nit:129,6
                         TId "only_lexer" ../src/test_parser.nit:129,6--15
                         AListExprs ../src/test_parser.nit:129,15
+                      TKwthen "then" ../src/test_parser.nit:129,17--20
                       ABlockExpr ../src/test_parser.nit:130,4--136,6
                         AVardeclExpr ../src/test_parser.nit:130,4--25
                           TKwvar "var" ../src/test_parser.nit:130,4--6
@@ -936,6 +972,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                   AImplicitSelfExpr ../src/test_parser.nit:132,12
                                   TId "no_print" ../src/test_parser.nit:132,12--19
                                   AListExprs ../src/test_parser.nit:132,19
+                              TKwthen "then" ../src/test_parser.nit:132,21--24
                               ABlockExpr ../src/test_parser.nit:133,6--64
                                 ACallExpr ../src/test_parser.nit:133,6--64
                                   AImplicitSelfExpr ../src/test_parser.nit:133,6
@@ -979,6 +1016,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TId "next" ../src/test_parser.nit:135,19--22
                                 AListExprs ../src/test_parser.nit:135,22
                             TKwend "end" ../src/test_parser.nit:136,4--6
+                      TKwelse "else" ../src/test_parser.nit:137,3--6
                       ABlockExpr ../src/test_parser.nit:138,4--153,5
                         AVardeclExpr ../src/test_parser.nit:138,4--33
                           TKwvar "var" ../src/test_parser.nit:138,4--6
@@ -1027,6 +1065,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             TKwisa "isa" ../src/test_parser.nit:142,13--15
                             AType ../src/test_parser.nit:142,17--22
                               TClassid "AError" ../src/test_parser.nit:142,17--22
+                          TKwthen "then" ../src/test_parser.nit:142,24--27
                           ABlockExpr ../src/test_parser.nit:143,5--144,10
                             ACallExpr ../src/test_parser.nit:143,5--58
                               AImplicitSelfExpr ../src/test_parser.nit:143,5
@@ -1065,6 +1104,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             AImplicitSelfExpr ../src/test_parser.nit:147,7
                             TId "xml" ../src/test_parser.nit:147,7--9
                             AListExprs ../src/test_parser.nit:147,9
+                          TKwthen "then" ../src/test_parser.nit:147,11--14
                           ABlockExpr ../src/test_parser.nit:148,5--149,32
                             ACallExpr ../src/test_parser.nit:148,5--25
                               ACallExpr ../src/test_parser.nit:148,5--8
@@ -1089,6 +1129,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                   TId "stdout" ../src/test_parser.nit:149,26--31
                                   AListExprs ../src/test_parser.nit:149,31
                                 TCpar ")" ../src/test_parser.nit:149,32
+                          TKwelse "else" ../src/test_parser.nit:150,4--7
                           AIfExpr ../src/test_parser.nit:150,9--152,6
                             TKwif "if" ../src/test_parser.nit:150,9--10
                             ANotExpr ../src/test_parser.nit:150,12--23
@@ -1097,6 +1138,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 AImplicitSelfExpr ../src/test_parser.nit:150,16
                                 TId "no_print" ../src/test_parser.nit:150,16--23
                                 AListExprs ../src/test_parser.nit:150,23
+                            TKwthen "then" ../src/test_parser.nit:150,25--28
                             ABlockExpr ../src/test_parser.nit:151,5--44
                               ACallExpr ../src/test_parser.nit:151,5--44
                                 AParExpr ../src/test_parser.nit:151,5--26
index 34ceaf4..36683fa 100644 (file)
@@ -14,6 +14,7 @@
 --> AForExpr 1,1--15
   TKwfor "for" 1,1--3
   TId "i" 1,5
+  TKwin "in" 1,7--8
   ACallExpr 1,10
     AImplicitSelfExpr 1,10
     TId "x" 1,10
@@ -30,7 +31,8 @@
       TKwmeth "fun" 1,1--3
       AIdMethid 1,5--7
         TId "foo" 1,5--7
-      ASignature 1,12
+      ASignature 1,9
+      TKwdo "do" 1,9--10
       ACallExpr 1,12
         AImplicitSelfExpr 1,12
         TId "z" 1,12
@@ -38,6 +40,7 @@
 --> ... ... AForExpr 1,1--3,3
   TKwfor "for" 1,1--3
   TId "i" 1,5
+  TKwin "in" 1,7--8
   ACallExpr 1,10
     AImplicitSelfExpr 1,10
     TId "x" 1,10
       TKwmeth "fun" 1,1--3
       AIdMethid 1,5--7
         TId "foo" 1,5--7
-      ASignature 2,1
+      ASignature 1,9
+      TKwdo "do" 1,9--10
       ABlockExpr 2,1--5,3
         AForExpr 2,1--4,3
           TKwfor "for" 2,1--3
           TId "i" 2,5
+          TKwin "in" 2,7--8
           ACallExpr 2,10
             AImplicitSelfExpr 2,10
             TId "x" 2,10
index e90aa48..4f1025c 100644 (file)
@@ -2,3 +2,5 @@ main
 threaded
 10
 parameterized and threaded
+main, waiting for baz
+baz result : 5
diff --git a/tests/syntax_semi.nit b/tests/syntax_semi.nit
new file mode 100644 (file)
index 0000000..90b0edb
--- /dev/null
@@ -0,0 +1,15 @@
+# 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.
+
+import end;interface Object;end;enum Bool;end;enum Int;fun output is intern;end;class A;init do 5.output;fun run do 6.output;end;class B;var val: Int;init(v: Int) do;7.output;self.val = v;end;fun run do val.output;end;class C;var val1: Int;var val2: Int = 10;end;fun foo do 2.output;fun bar(i: Int) do i.output;fun baz: Int do return 4;1.output;foo;bar(3);baz.output;var a = new A;a.run;var b = new B(8);b.run;var c = new C(9);c.val1.output;c.val2.output
diff --git a/tests/syntax_semi2.nit b/tests/syntax_semi2.nit
new file mode 100644 (file)
index 0000000..8f15f4b
--- /dev/null
@@ -0,0 +1,26 @@
+# 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.
+
+import kernel
+
+1.output;
+2.output;;
+3.output;#comment
+
+;4.output
+;;5.output
+#comment
+;6.output
+
+#alt1#7.;comment
diff --git a/tests/test_bufferedfilereader.nit b/tests/test_bufferedfilereader.nit
new file mode 100644 (file)
index 0000000..f5ac80a
--- /dev/null
@@ -0,0 +1,22 @@
+# 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.
+
+var f = new FileReader.open("test_annot_c_compiler.nit")
+
+while not f.eof do
+       var s = f.read(4)
+       print "Read {s.length} chars: {s}"
+end
+
+f.close
index 5261b5e..80a3025 100644 (file)
 # limitations under the License.
 
 class A
-       var value : Int
+       var value: Int
 
-       init ( value : Int ) do self.value = value
+       init(value: Int) do self.value = value
 
-       fun +( other : A ) : A import value, A `{
+       fun +(other: A): A import value, A `{
                int s = A_value( recv );
                int o = A_value( other );
 
@@ -31,7 +31,7 @@ class A
                return new_A(+s);
        `}
 
-       fun -( other : A ) : A import value, A `{
+       fun -(other: A): A import value, A `{
                int s = A_value( recv );
                int o = A_value( other );
 
@@ -43,19 +43,19 @@ class A
                return new_A(-s);
        `}
 
-       fun *( by : Int ) : A import value, A `{
+       fun *(by: Int): A import value, A `{
                int s = A_value( recv );
 
                return new_A( s * by );
        `}
 
-       fun /( by : Int ) : A import value, A `{
+       fun /(by: Int): A import value, A `{
                int s = A_value( recv );
 
                return new_A( s / by );
        `}
 
-       redef fun ==( other ) import value, nullable Object.as(A) `{
+       redef fun ==(other) import value, nullable Object.as(A) `{
                if ( nullable_Object_is_a_A( other ) &&
                         A_value( nullable_Object_as_A(other) ) == A_value( recv ) )
                        return 1;
@@ -63,112 +63,114 @@ class A
                        return 0;
        `}
 
-       fun %( other : A ) : A import value, A `{
+       fun %(other: A): A import value, A `{
                return new_A( A_value( recv ) % A_value( other ) );
        `}
 
-#      fun +=( other : A ) : A import value, value=, A `{
-#              int new_val = A_value( recv ) + A_value( other );
-#              A_value__assign( recv, new_val );
-#              return new_A( new_val );
-#      `}
-
-#      fun -=( other : A ) : A import +=, A, value `{
-#              A inv_other = new_A( -1*A_value( other ) );
-#              return A__plus_equal( recv, int_other );
-#      `}
-
-       fun <=>( other : A ) : A import value, A `{
+       fun <=>(other: A): A import value, A `{
                return new_A( A_value( recv )* 1024 );
        `}
 
-#      fun @( other : A ) : A import value, A `{
-#              return new_A( A_value( recv )* 1000 );
-#      `}
-
-       fun >( other : A ) : Bool import value `{
+       fun >(other: A): Bool import value `{
                return A_value( recv ) > A_value( other );
        `}
 
-       fun <( other : A ) : Bool import value `{
+       fun <(other: A): Bool import value `{
                return A_value( recv ) < A_value( other );
        `}
 
-       fun >=( other : A ) : Bool import value `{
+       fun >=(other: A): Bool import value `{
                return A_value( recv ) >= A_value( other );
        `}
 
-       fun <=( other : A ) : Bool import value `{
+       fun <=(other: A): Bool import value `{
                return A_value( recv ) <= A_value( other );
        `}
 
-       fun >>( other : A ): A import value, value=, A `{
+       fun >>(other: A): A import value, value=, A `{
                int new_val = A_value( recv ) >> A_value( other );
-               A_value__assign( recv, new_val );
-               return recv;
+               return new_A(new_val);
        `}
 
-       fun <<( other : A ): A import value, A `{
+       fun <<(other: A): A import value, A `{
                int new_val = A_value( recv ) << A_value( other );
-               A_value__assign( recv, new_val );
-               return recv;
+               return new_A(new_val);
+       `}
+
+       fun |(other: A): A import value, A `{
+               int new_val = A_value( recv ) | A_value( other );
+               return new_A(new_val);
+       `}
+
+       fun ^(other: A): A import value, A `{
+               int new_val = A_value( recv ) ^ A_value( other );
+               return new_A(new_val);
+       `}
+
+       fun ~: A import value, A `{
+               int new_val = ~A_value( recv );
+               return new_A(new_val);
        `}
 
-       fun []( index : Int ) : A import A `{
+       fun &(other: A): A import value, A `{
+               int new_val = A_value( recv ) & A_value( other );
+               return new_A(new_val);
+       `}
+
+       fun [](index: Int): A import A `{
                return new_A( index );
        `}
 
-       fun []=( index : Int, value : A ) : A import A `{
+       fun []=(index: Int, value: A): A import A `{
                return new_A( index + A_value( value ) );
        `}
 
        redef fun to_s do return value.to_s
 end
 
-print new A( 1 ) + new A( 10 ) # 11
-print new A( 10 ) - new A( 1 ) # 9
+print new A(1) + new A(10) # 11
+print +new A(123)
+print new A(10) - new A(1) # 9
+print -new A(123)
 
-print new A( 2 ) * 11 # 22
-print new A( 33 ) / 11 # 3
+print new A(2) * 11 # 22
+print new A(33) / 11 # 3
 
-#print new A( 44 ) == null # false
-print new A( 55 ) == 55 # false
-print new A( 33 ) == new A( 11 ) # false
-print new A( 22 ) == new A( 77 ) # false
-print new A( 11 ) == new A( 11 ) # true
+print new A(44) == null # false
+print new A(55) == 55 # false
+print new A(33) == new A(11) # false
+print new A(22) == new A(77) # false
+print new A(11) == new A(11) # true
 
-print new A( 147 ) % new A( 12 ) # 3
-print new A( 4 ) <=> new A( 123 ) # 4096
+print new A(147) % new A(12) # 3
+print new A(4) <=> new A(123) # 4096
 
-print new A( 1 ) < new A( 100 ) # true
-print new A( 100 ) < new A( 100 ) # false
-print new A( 100 ) < new A( 1 ) # false
+print new A(1) < new A(100) # true
+print new A(100) < new A(100) # false
+print new A(100) < new A(1) # false
 
-print new A( 1 ) > new A( 100 ) # false
-print new A( 100 ) > new A( 100 ) # false
-print new A( 100 ) > new A( 1 ) # true
+print new A(1) > new A(100) # false
+print new A(100) > new A(100) # false
+print new A(100) > new A(1) # true
 
-print new A( 1 ) <= new A( 100 ) # true
-print new A( 100 ) <= new A( 100 ) # true
-print new A( 100 ) <= new A( 1 ) # false
+print new A(1) <= new A(100) # true
+print new A(100) <= new A(100) # true
+print new A(100) <= new A(1) # false
 
-print new A( 1 ) >= new A( 100 ) # false
-print new A( 100 ) >= new A( 100 ) # true
-print new A( 100 ) >= new A( 1 ) # true
+print new A(1) >= new A(100) # false
+print new A(100) >= new A(100) # true
+print new A(100) >= new A(1) # true
 
-var x = new A( 1 )
-x = x << new A( 5 )
-print x # 32
+print new A(1) << new A(5) # 32
+print new A(32) >> new A(2) # 8
 
-var y = new A( 32 )
-y = y >> new A( 2 )
-print y # 8
+print new A(3) | new A(6) # 7
+print new A(3) ^ new A(6) # 5
+print new A(3) & new A(6) # 2
+print ~new A(3) # -4
 
-var a = new A( 456 )
-print a[ 52 ] # 52
+var a = new A(456)
+print a[52] # 52
 
-a[ 74 ] = new A( 96 )
+a[74] = new A(96)
 print a # 96
-
-print(+(new A(123)))
-print(-(new A(123)))
index 510b5fb..4916f4b 100644 (file)
@@ -47,9 +47,10 @@ class MyApp
        do
                init_gtk
 
-               win = new GtkWindow( 0 )
+               win = new GtkWindow(new GtkWindowType.toplevel)
+               win.connect_destroy_signal_to_quit
 
-               container = new GtkGrid(2,1,true)
+               container = new GtkGrid
                win.add( container )
 
                lbl = new GtkLabel( "Hello world" )
index 39e0cbd..2769eba 100755 (executable)
@@ -21,7 +21,7 @@
 export LANG=C
 export LC_ALL=C
 export NIT_TESTING=true
-export MNIT_SRAND=0
+export NIT_SRAND=0
 
 unset NIT_DIR